Chapter overview

In this chapter, I focus on the second of my three key questions about the development of representations of mental life: How are the conceptual units that anchor representations of mental life organized in relation to each other, and how does this organization change over development? As in Chapter III, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of the organization of conceptual units in early childhood, middle childhood, and adulthood.

General analysis plan

High-level overview

My goal in this chapter is to examine the relationships among the “conceptual units” identified in Chapter III. How does a participant’s assessment of one conceptual unit for a particular target character (e.g., the degree to which he or she indicates that a beetle is capable of the physiological sensations of the BODY) affect that participant’s assessments of other conceptual units for that target character (e.g., his or her assessment of the beetle’s capaciteis in the domains of HEART or MIND)?

I focus in particular on the possibility that the mental capacity attributions documented by the studies included in this dissertation—re-analyzed as indicators of the broader “conceptual units” identified in Chapter III—might shed light on the hierarchical organization of these conceptual units, i.e., which conceptual units might be more basic or fundamental vs. more complex, and whether any of these conceptual units might or might not be considered to depend on the presence of others. In Chapter II, I illustrated this with the following example: If many participants endorse capacities associated with Conceptual Unit A without endorsing capacities associated with Conceptual Unit B, but very few participants do the reverse (endorsing capacities associated with Conceptual Unit B but not Conceptual Unit A), this provides some evidence that Conceptual Unit A is more basic or fundamental than Conceptual Unit B, or that Conceptual Unit B somehow depends on (perhaps requires) Conceptual Unit A.

Here I will translate this general interest in the relationships among conceptual units, as well as the specific intuition about how to detect the kinds of asymmetries that would be the signature of hierarchical relationships, into a specific analysis plan to be applied to each of these datasets in turn.

Details of analyses

Unlike the previous chapter, in which I employed a canonical approach to identifying latent constructs through analyses of correlation structures—exploratory factor analysis (EFA)—in this chapter there is no tried-and-true method for meeting my analysis goals. Instead, I chart my own course through these datasets, using the EFA solutions reported in Chapter II to score participants’ endorsements of each conceptual unit for the particular target character(s) that they assessed, examining visualizations of the complicated relationships among these endorsements, and then conducting more targeted statistical analyses of one particular aspect of these relationships: the possibility of asymmetries in the endorsements of these conceptual units.

Scoring endorsements of conceptual units

The first step in these analyses is to transform participants’ ratings of individual mental capacities into “scores” that indicate the extent to which they endorsed a particular conceptual unit for the target character(s) that they were assigned to assess. To do this, I make use of the EFAs presented in Chapter II—which originally served to identify a set of conceptual units in a particular sample—to a new end: the construction of “scales” for each of these conceptual units. Scale construction is a common use of EFA and similar dimensionality reduction analyses (if anything, more common than using EFA to make the kinds of theoretical arguments featured in Chapter II).

For each EFA solution, I construct a scale for each of the factors (conceptual units) identified by that solution. First, I sort each of the mental capacities included in that study into categories based on their loadings on each of the factors in that solution. For each mental capacity, I identify the “dominant” factor as the factor with the largest positive factor loading. For example, if the mental capacity feel happy had loadings of 0.60 on the BODY factor, 0.70 on the HEART factor, and 0.30 on the MIND factor, I would sort it into the HEART category. For each factor, I take the six highest-loading items as a candidate scale, then “drop” the capacities with the smallest factor loadings on their respective dominant factors until I have the same number of mental capacities in each category. For example, if the BODY factor were the dominant factor for nine mental capacities, the HEART factor for six mental capacities, and the MIND factor for five capacities, for each factor I would keep only the capacities with the five highest positive loadings on that factor, in order to construct three scales of equal length (and a maximum length of six items).

To calculate scores on these scales, I take the average of all of mental capacities for each scale. This yields a dataset in which each participant is associated with one score for each of the conceptual units identified in the relative EFA solution, for each of the target characters that that participant assessed.

In this chapter, I apply this method to all of the three-factor solutions for adult samples as presented in Chapter II (Studies 1-4), yielding BODY, HEART, and MIND scores for each target character as assessed by each participant. (I ignore the aberrant four-factor solution for adults in Study 2 suggested by one of the three factor retention protocols considered in that chapter, since this was the only study out of the seven considered in which a four-factor solution appeared to add any value beyond the robust BODY-HEART-MIND framework common to all studies. [XX APPENDIX B?])

For child samples, I apply this method both to the solutions emerging from children’s own data and to the corresponding adult solutions for the studies in question. This allows me to explore both the relationships among children’s own conceptual units, and the relationships among a fully adult-like set of conceptual units (presumably, the conceptual units that these children will eventually come to agree on as they mature into adults).

For “older” children (7-9y of age; Studies 2 and 3), this means examining two sets of three conceptual units for each sample of children: (1) BODY, HEART, and MIND as defined by adults in that study; and (2) BODY, HEART, and MIND as defined by the children themselves. Because the EFAs for older children and adults are so similar (see Chapter II), I expect the outcomes of these two approaches to constructing BODY, HEART, and MIND scales to yield very similar results in this age group.

For “younger” children, this means examining multiple sets of conceptual units for each sample of children, including (1) BODY, HEART, and MIND as defined by adults in that study; and (2) varying sets of 2-4 conceptual units as defined by EFA of children’s own responses, using different factor retention protocols. The EFAs of younger children’s responses were less reliable, and less adult-like, than those of older children. As a consequence, I expect the outcomes of these different approaches to constructing scales for each conceptual unit to yield rather different results in this age group.

The reader should note that this is far from the only way to approach “scoring” participants on these conceptual units. In particular, I could have examined factor scores—summaries of each factor (conceptual unit) based on a participant’s responses to all mental capacities and the relationships between all mental capacities and all factors included in that EFA solution—rather than constructing “scales” in the way I have just outlined. However, much like z-scores, factor scores indicate where a participant falls in relation to other participants in the sample, and do not provide the kind of absolute score that is key to my goal in this chapter, which is to analyze relationships among factors in terms of the extent to which individual participants indicated that target characters “possessed” the conceptual units BODY, HEART, and MIND. [XX APPENDIX B?]

Even within the “scale” approach described in this section, there are many parameters of this analysis that I could have set differently. For example, I could have considered absolute factor loadings rather than raw factor loadings, which would allow for mental capacities that loaded especially strongly negatively on a particular factor to contribute (negatively) to scores on that conceptual unit; I could have omitted the step of making the scales for all factors within a single EFA sotluion equal length; I could have chosen to use only the top 4 or 5 mental capacities across all EFA solutions, or to set no limit on the number of items in a scale; or I could have implemented absolute thresholds for how strongly a mental capacity must load on a factor in order to count toward the score for that conceptual unit, or absolute limits on the degree to which a mental capacity can “cross-load” on non-dominant factors and still count toward the score for any one conceptual unit. [XX APPENDIX B?] However, these kinds of details differ quite dramatically across studies and age groups. For example, in some samples there are no strong negative factor loadings, and in others there are; if I considered absolute loadings rather than raw loadings, I could end up comparing scores from a “bipolar” scale in one sample to scores from a “unipolar” scales in another sample, making the comparison more difficult to interpret. Likewise, some EFA solutions tended to feature generally weaker factor loadings than others; if I were to impose absolute thresholds for the strength of factor loadings, I could end up comparing scores from scales of wildly different lengths across samples. In my view, the analysis decisions outlined above maximize comparability across studies and age groups—the primary goal of this chapter. (Note, however, that in the analysis code for this chapter I have included easy short cuts for the interested reader to explore different options for each of these parameters.)

Visualizing relationships

XX

outline:

  • for any sample, I have identified relevant conceptual units (chapter II) and scored each participant’s endorsement of each of these units for their assigned target character(s) (previous section)
  • now, I want to assess the relationships among these endorsements
  • but I don’t really know what to expect, and these relationships could be very complex
  • so, start with holistic, exploratory visualization: scatterplots of pairs of conceptual units

Targeting the possibility of asymmetries

XX

outline:

  • now, a more targeted approach to one particular aspect of these relationships: asymmetries
  • reminder of basic intuition: in this sample, do participants tend to endorse A without B? B without A? is there an asymmetry here?
  • connect to the visualizations: asymmetries of points around the y=x line of equivalence
  • one way to boil this down to a number: difference scores (for each pair), comparisons to 0 via bayesian regressions
  • for any pair: if 0, no evidence for hierarchy. if non-zero, some evidence.
  • comparisons across pairs: further from 0, more hierarchical.
  • caveat 1: these are post-hoc analyses! but still using confirmatory stats.
  • caveat 2: scores of (0,0) treated same as scores of (6,6), or anywhere in between.

Study 1: An adult endpoint

In the context of this dissertation, Study 1 serves the role of describing a developmental endpoint for conceptual representations of mental life. In this chapter, I focus on what these studies can reveal about the relationships among the conceptual units discussed in Chapter III. These analyses were not part of the original publication of these studies (Weisman et al., 2017).

Special notes on data processing and analysis

As noted in Chapter II, in the original analysis of these datasets responses were recoded to run from -3 to +3 before analyses (Weisman et al., 2017); in this dissertation, I maintain the 0-6 coding for comparability to Studies 2-4.

Results

Study 1a

In Study 1a, 405 US adults each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1b

Study 1b was a direct replication of Study 1a: 406 US adults each assessed a single target character (either a beetle or a robot) on 40 mental capacities. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1c

In Study 1c, 200 US adults each assessed two target characters on 40 mental capacities. Like Studies 1a and 1b, this study employed the “edge case” variant of the general approach; but in this study, all participants assessed both of these target characters side by side (with left-right position counterbalaned across participants). (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1d

In Study 1d, 431 US adults each assessed a single target character on 40 mental capacities. Unlike Studies 1a-1c, this study employed the “many characters” variant of the general approach, in which participants were randomly assigned to assess one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Discussion

XX

Table 4.1: Scales for each of the conceptual units (factors) identified by EFA for US Adults in Studies 1a-1d (see Chapter III). A checkmark indicates that a mental capacity was included in a scale for a particular study.
Capacity Study 1a Study 1b Study 1c Study 1d
BODY scale
getting hungry
experiencing pain
feeling tired
experiencing fear
experiencing pleasure
having free will
being conscious
having desires
feeling calm
HEART scale
feeling embarrassed
experiencing pride
feeling love
experiencing guilt
holding beliefs
feeling disrespected
feeling depressed
telling right from wrong
MIND scale
remembering things
recognizing someone
sensing temperatures
communicating with others
seeing things
perceiving depth
detecting sounds
working toward a goal
making choices

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. To make the study appropriate for children in this age range, the wording of some the 40 mental capacities employed in Study 1 was modified to use more age-appropriate vocabulary, and participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.2.

Visualization

Analysis of asymmetries

XX

Children (7-9y)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.2.

Visualization

Using adults’ scales

XX

Using children’s own scales

XX

Analysis of asymmetries

Using adults’ scales

XX

Developmental comparison

XX

Using children’s own scales

XX

Discussion

XX

Table 4.2: Scales for each of the conceptual units (factors) identified by EFA for US Adults and children in Study 2 (see Chapter III). A checkmark indicates that a mental capacity was included in a scale for a particular sample.
Capacity Adults Children, 7-9y
BODY scale
get hungry
feel pain
feel scared
feel tired
feel safe
smell things
feel sick...
HEART scale
feel proud
feel joy
feel sad
feel happy
feel love
feel guilty
get hurt feelings
MIND scale
figure out how to do things
make choices
recognize somebody else
sense...far away
remember things
see things
be aware of itself
be aware of things
sense temperatures

Study 3: Conceptual change over early and middle childhood (4-9y)

In Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. To make the study appropriate for children in this age range, participants assessed a subset of the 40 mental capacities employed in Study 2, chosen to represent the three “conceptual units” revealed by Studies 1-2 (BODY, HEART, and MIND) and to cover a similar range of mental capacities as Studies 1-2. As in Study 2, participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess either one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.3.

Visualization

XX

Analysis of asymmetries

XX

Children (7-9y)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.3.

Visualization

Using adults’ scales

XX

Using children’s own scales

XX

Analysis of asymmetries

Using adults’ scales

XX

Using children’s own scales

XX

Children (4-6y)

Scale construction

Three-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY*, HEART*, and MIND scales of 5 items each; see Table 4.3.

Two-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY-HEART and MIND scales of 6 items each; see Table 4.3.

Visualization

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (three-factor solution)

XX

Analysis of asymmetries

Using adults’ scales

XX

Developmental comparison
Using children’s own scales (three-factor solution)

XX

Using children’s own scales (two-factor solution)

XX

Discussion

XX

Table 4.3: Scales for each of the conceptual units (factors) identified by EFA for US Adults, older children, and younger children in Study 3 (see Chapter III). For younger children, this includes scales for both three- and two-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of older children and adults, such that some mental capacities were included in different scales across age groups (e.g., feel scared was part of the BODY scale for older children and adults, but part of the HEART* scale for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
Younger children, 4-6y
Capacity Adults Older children, 7-9y 3-factor solution 2-factor solution
BODY scale
feel pain
get hungry BODY-HEART
feel tired
smell things
feel scared HEART*
feel sick... BODY-HEART
get angry BODY-HEART
HEART scale
feel happy BODY-HEART
feel guilty MIND MIND
get hurt feelings BODY*
feel embarrassed
feel proud BODY-HEART
feel love
feel sad BODY-HEART
MIND scale
sense...far away
sense temperatures
figure out how to do things
be aware of things
remember things
make choices

Study 4: A focus on early childhood (4-5y)

In Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities. To make the study appropriate for children in this age range, this study employed a new set of 18 mental capacities (some but not all of which were used in Studies 1-3). In addition, participants were presented with a more child-friendly visual representation of the 3-point response scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 5 items each; see Table 4.4.

Visualization

XX

Analysis of asymmetries

XX

Children (4-5y)

Scale construction

Three-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 3 items each; see Table 4.4.

Four-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY (nausea), BODY (other), HEART*, and MIND* scales of 3 items each; see Table 4.4.

Visualization

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (four-factor solution)

XX

Analysis of asymmetries

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (four-factor solution)

XX

Discussion

XX

Table 4.4: Scales for each of the conceptual units (factors) identified by EFA for US Adults and children in Study 4 (see Chapter III). For children, this includes scales for both three- and four-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of adults, such that some mental capacities were included in different scales across age groups (e.g., love someone was part of the HEART scale for adults, but part of the MIND* scale in the four-factor solution for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
Children, 4-5y
Capacity Adults 3-factor solution 4-factor solution
BODY scale
get thirsty BODY (other)
feel hungry BODY (other)
smell things BODY (nausea)
feel tired BODY (nausea)
feel sick BODY (nausea)
HEART scale
love someone MIND*
get sad
hate someone
feel sorry
get lonely
MIND scale
figure things out
remember things
know stuff
think
hear BODY (other)

General discussion

XX

Chapter conclusion

In this chapter, I explored a second aspect of conceptual representations of mental life among US children and adults: The relationships among conceptual units. Studies 2-4 are consistent with the following theory: XX.

As in Chapter III, I urge the reader to remember that this is not the only possible interpretation of the pattern of results presented here; additional studies—in particular, studies designed to test the hypothesis that XX— could provide converging evidence or could challenge this theoretical interpretation. Instead, the primary role of the re-analysis discussed here has been to inspire the hypothesis stated in the previous paragraph and to the foundation for future tests of this hypothesis, in turn refining a general theory of this aspect of conceptual development.

In the next chapter, I apply the same exploratory spirit to the third and final aspect of conceptual representations of mental life: the application or deployment of these conceptual units in reasoning about various kinds of beings.

TO DO

  • implement overall plan
    • study 1: adults for each sample = 4 regs total
    • study 2: adults for each sample (2); children’s for child sample (1); comparison (1) = 4 regs total
    • study 3: adults for each sample (3); comparison (1) = 4 regs total
    • study 4: adults for each sample (2); comparison (1) = 3 regs total
  • make regression tables
    • study 1 (4 regs: studies 1a-1d)
    • study 2 (3 regs: adult scales for adults, children; child scales)
    • study 2 (1 reg: developmental comparison)
    • study 3 (3 regs: adult scales for adults, older, young children)
    • study 3 (1 reg: developmental comparison)
    • study 4 (2 regs: adult scles for adults, children)
    • study 4 (1 reg: developmental comparison)
  • move to appendix
    • study 2: adults’ 4-factor solution for adults? for 7-9yo?
    • study 3: 7-9yo for 7-9yo (1); 4-6yo for 4-6yo x 2 (2)
    • study 4: 4-6yo for 4-6yo x 2 (2)
  • reconsider adding to appendix
    • study 3: 7-9yo for 4-6yo?
    • all studies: comparisons across pairs of units (instead of separate regs for each unit)?
LS0tCnRpdGxlOiAiQ2hhcHRlciBJVjogQ2hhbmdlcyBpbiBvcmdhbml6YXRpb24gb2YgY29uY2VwdHVhbCB1bml0cyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gRiwgZWNobyA9IEYpCmBgYAoKYGBge3J9CiMgIyBmb3Iga25pdHRpbmcgdG8gLmRvY3gKIyBvdXRwdXQ6CiMgICB3b3JkX2RvY3VtZW50OgojICAgICByZWZlcmVuY2VfZG9jeDogIi4vc3RvcmVkL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKYGBge3J9CiMgcnVuIHVyLXNldHVwIHNjcmlwdCAod2hpY2ggcnVucyBvdGhlciBzY3JpcHRzKQpzb3VyY2UoIi4vc2NyaXB0cy9fU0VUVVAuUiIpCiAKIyBsb2FkIGluIEVGQXMgJiBuYW1lcyBmcm9tIENoYXB0ZXIgSUlJCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDAzLlIiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB0aGUgc2Vjb25kIG9mIG15IHRocmVlIGtleSBxdWVzdGlvbnMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZTogX0hvdyBhcmUgdGhlIGNvbmNlcHR1YWwgdW5pdHMgdGhhdCBhbmNob3IgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIG9yZ2FuaXplZCBpbiByZWxhdGlvbiB0byBlYWNoIG90aGVyLCBhbmQgaG93IGRvZXMgdGhpcyBvcmdhbml6YXRpb24gY2hhbmdlIG92ZXIgZGV2ZWxvcG1lbnQ/XyBBcyBpbiBDaGFwdGVyIElJSSwgdG8gYWRkcmVzcyB0aGlzIHF1ZXN0aW9uIEkgZHJhdyBvbiBkYXRhIGZyb20gYWxsIG9mIHRoZSBjdXJyZW50IHN0dWRpZXMgKFN0dWRpZXMgMS00KTsgZm9yIGRldGFpbHMgYWJvdXQgdGhlIG1ldGhvZHMgb2YgdGhlc2Ugc3R1ZGllcywgc2VlIENoYXB0ZXIgSUkuIFRoZSBnb2FsIG9mIHRoaXMgY2hhcHRlciBpcyB0byBwcm92aWRlICJzbmFwc2hvdHMiIG9mIHRoZSBvcmdhbml6YXRpb24gb2YgY29uY2VwdHVhbCB1bml0cyBpbiBlYXJseSBjaGlsZGhvb2QsIG1pZGRsZSBjaGlsZGhvb2QsIGFuZCBhZHVsdGhvb2QuCgoKIyBHZW5lcmFsIGFuYWx5c2lzIHBsYW4KCiMjIEhpZ2gtbGV2ZWwgb3ZlcnZpZXcKCk15IGdvYWwgaW4gdGhpcyBjaGFwdGVyIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlICJjb25jZXB0dWFsIHVuaXRzIiBpZGVudGlmaWVkIGluIENoYXB0ZXIgSUlJLiBIb3cgZG9lcyBhIHBhcnRpY2lwYW50J3MgYXNzZXNzbWVudCBvZiBvbmUgY29uY2VwdHVhbCB1bml0IGZvciBhIHBhcnRpY3VsYXIgdGFyZ2V0IGNoYXJhY3RlciAoZS5nLiwgdGhlIGRlZ3JlZSB0byB3aGljaCBoZSBvciBzaGUgaW5kaWNhdGVzIHRoYXQgYSBiZWV0bGUgaXMgY2FwYWJsZSBvZiB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIHRoZSBCT0RZKSBhZmZlY3QgdGhhdCBwYXJ0aWNpcGFudCdzIGFzc2Vzc21lbnRzIG9mIG90aGVyIGNvbmNlcHR1YWwgdW5pdHMgZm9yIHRoYXQgdGFyZ2V0IGNoYXJhY3RlciAoZS5nLiwgaGlzIG9yIGhlciBhc3Nlc3NtZW50IG9mIHRoZSBiZWV0bGUncyBjYXBhY2l0ZWlzIGluIHRoZSBkb21haW5zIG9mIEhFQVJUIG9yIE1JTkQpPwoKSSBmb2N1cyBpbiBwYXJ0aWN1bGFyIG9uIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIGRvY3VtZW50ZWQgYnkgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb27igJRyZS1hbmFseXplZCBhcyBpbmRpY2F0b3JzIG9mIHRoZSBicm9hZGVyICJjb25jZXB0dWFsIHVuaXRzIiBpZGVudGlmaWVkIGluIENoYXB0ZXIgSUlJ4oCUbWlnaHQgc2hlZCBsaWdodCBvbiB0aGUgX2hpZXJhcmNoaWNhbCBvcmdhbml6YXRpb25fIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMsIGkuZS4sIHdoaWNoIGNvbmNlcHR1YWwgdW5pdHMgbWlnaHQgYmUgbW9yZSBiYXNpYyBvciBmdW5kYW1lbnRhbCB2cy4gbW9yZSBjb21wbGV4LCBhbmQgd2hldGhlciBhbnkgb2YgdGhlc2UgY29uY2VwdHVhbCB1bml0cyBtaWdodCBvciBtaWdodCBub3QgYmUgY29uc2lkZXJlZCB0byBkZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIG90aGVycy4gSW4gQ2hhcHRlciBJSSwgSSBpbGx1c3RyYXRlZCB0aGlzIHdpdGggdGhlIGZvbGxvd2luZyBleGFtcGxlOiBJZiBtYW55IHBhcnRpY2lwYW50cyBlbmRvcnNlIGNhcGFjaXRpZXMgYXNzb2NpYXRlZCB3aXRoIENvbmNlcHR1YWwgVW5pdCBBIHdpdGhvdXQgZW5kb3JzaW5nIGNhcGFjaXRpZXMgYXNzb2NpYXRlZCB3aXRoIENvbmNlcHR1YWwgVW5pdCBCLCBidXQgdmVyeSBmZXcgcGFydGljaXBhbnRzIGRvIHRoZSByZXZlcnNlIChlbmRvcnNpbmcgY2FwYWNpdGllcyBhc3NvY2lhdGVkIHdpdGggQ29uY2VwdHVhbCBVbml0IEIgYnV0IG5vdCBDb25jZXB0dWFsIFVuaXQgQSksIHRoaXMgcHJvdmlkZXMgc29tZSBldmlkZW5jZSB0aGF0IENvbmNlcHR1YWwgVW5pdCBBIGlzIG1vcmUgYmFzaWMgb3IgZnVuZGFtZW50YWwgdGhhbiBDb25jZXB0dWFsIFVuaXQgQiwgb3IgdGhhdCBDb25jZXB0dWFsIFVuaXQgQiBzb21laG93IGRlcGVuZHMgb24gKHBlcmhhcHMgcmVxdWlyZXMpIENvbmNlcHR1YWwgVW5pdCBBLiAKCkhlcmUgSSB3aWxsIHRyYW5zbGF0ZSB0aGlzIGdlbmVyYWwgaW50ZXJlc3QgaW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgY29uY2VwdHVhbCB1bml0cywgYXMgd2VsbCBhcyB0aGUgc3BlY2lmaWMgaW50dWl0aW9uIGFib3V0IGhvdyB0byBkZXRlY3QgdGhlIGtpbmRzIG9mIGFzeW1tZXRyaWVzIHRoYXQgd291bGQgYmUgdGhlIHNpZ25hdHVyZSBvZiBoaWVyYXJjaGljYWwgcmVsYXRpb25zaGlwcywgaW50byBhIHNwZWNpZmljIGFuYWx5c2lzIHBsYW4gdG8gYmUgYXBwbGllZCB0byBlYWNoIG9mIHRoZXNlIGRhdGFzZXRzIGluIHR1cm4uIAoKIyMgRGV0YWlscyBvZiBhbmFseXNlcwoKVW5saWtlIHRoZSBwcmV2aW91cyBjaGFwdGVyLCBpbiB3aGljaCBJIGVtcGxveWVkIGEgY2Fub25pY2FsIGFwcHJvYWNoIHRvIGlkZW50aWZ5aW5nIGxhdGVudCBjb25zdHJ1Y3RzIHRocm91Z2ggYW5hbHlzZXMgb2YgY29ycmVsYXRpb24gc3RydWN0dXJlc+KAlGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKeKAlGluIHRoaXMgY2hhcHRlciB0aGVyZSBpcyBubyB0cmllZC1hbmQtdHJ1ZSBtZXRob2QgZm9yIG1lZXRpbmcgbXkgYW5hbHlzaXMgZ29hbHMuIEluc3RlYWQsIEkgY2hhcnQgbXkgb3duIGNvdXJzZSB0aHJvdWdoIHRoZXNlIGRhdGFzZXRzLCB1c2luZyB0aGUgRUZBIHNvbHV0aW9ucyByZXBvcnRlZCBpbiBDaGFwdGVyIElJIHRvIHNjb3JlIHBhcnRpY2lwYW50cycgZW5kb3JzZW1lbnRzIG9mIGVhY2ggY29uY2VwdHVhbCB1bml0IGZvciB0aGUgcGFydGljdWxhciB0YXJnZXQgY2hhcmFjdGVyKHMpIHRoYXQgdGhleSBhc3Nlc3NlZCwgZXhhbWluaW5nIHZpc3VhbGl6YXRpb25zIG9mIHRoZSBjb21wbGljYXRlZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZXNlIGVuZG9yc2VtZW50cywgYW5kIHRoZW4gY29uZHVjdGluZyBtb3JlIHRhcmdldGVkIHN0YXRpc3RpY2FsIGFuYWx5c2VzIG9mIG9uZSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGVzZSByZWxhdGlvbnNoaXBzOiB0aGUgcG9zc2liaWxpdHkgb2YgYXN5bW1ldHJpZXMgaW4gdGhlIGVuZG9yc2VtZW50cyBvZiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzLgoKIyMjIFNjb3JpbmcgZW5kb3JzZW1lbnRzIG9mIGNvbmNlcHR1YWwgdW5pdHMKClRoZSBmaXJzdCBzdGVwIGluIHRoZXNlIGFuYWx5c2VzIGlzIHRvIHRyYW5zZm9ybSBwYXJ0aWNpcGFudHMnIHJhdGluZ3Mgb2YgaW5kaXZpZHVhbCBtZW50YWwgY2FwYWNpdGllcyBpbnRvICJzY29yZXMiIHRoYXQgaW5kaWNhdGUgdGhlIGV4dGVudCB0byB3aGljaCB0aGV5IGVuZG9yc2VkIGEgcGFydGljdWxhciBjb25jZXB0dWFsIHVuaXQgZm9yIHRoZSB0YXJnZXQgY2hhcmFjdGVyKHMpIHRoYXQgdGhleSB3ZXJlIGFzc2lnbmVkIHRvIGFzc2Vzcy4gVG8gZG8gdGhpcywgSSBtYWtlIHVzZSBvZiB0aGUgRUZBcyBwcmVzZW50ZWQgaW4gQ2hhcHRlciBJSeKAlHdoaWNoIG9yaWdpbmFsbHkgc2VydmVkIHRvIGlkZW50aWZ5IGEgc2V0IG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gYSBwYXJ0aWN1bGFyIHNhbXBsZeKAlHRvIGEgbmV3IGVuZDogdGhlIGNvbnN0cnVjdGlvbiBvZiAic2NhbGVzIiBmb3IgZWFjaCBvZiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzLiBTY2FsZSBjb25zdHJ1Y3Rpb24gaXMgYSBjb21tb24gdXNlIG9mIEVGQSBhbmQgc2ltaWxhciBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gYW5hbHlzZXMgKGlmIGFueXRoaW5nLCBtb3JlIGNvbW1vbiB0aGFuIHVzaW5nIEVGQSB0byBtYWtlIHRoZSBraW5kcyBvZiB0aGVvcmV0aWNhbCBhcmd1bWVudHMgZmVhdHVyZWQgaW4gQ2hhcHRlciBJSSkuCgpGb3IgZWFjaCBFRkEgc29sdXRpb24sIEkgY29uc3RydWN0IGEgc2NhbGUgZm9yIGVhY2ggb2YgdGhlIGZhY3RvcnMgKGNvbmNlcHR1YWwgdW5pdHMpIGlkZW50aWZpZWQgYnkgdGhhdCBzb2x1dGlvbi4gRmlyc3QsIEkgc29ydCBlYWNoIG9mIHRoZSBtZW50YWwgY2FwYWNpdGllcyBpbmNsdWRlZCBpbiB0aGF0IHN0dWR5IGludG8gY2F0ZWdvcmllcyBiYXNlZCBvbiB0aGVpciBsb2FkaW5ncyBvbiBlYWNoIG9mIHRoZSBmYWN0b3JzIGluIHRoYXQgc29sdXRpb24uIEZvciBlYWNoIG1lbnRhbCBjYXBhY2l0eSwgSSBpZGVudGlmeSB0aGUgImRvbWluYW50IiBmYWN0b3IgYXMgdGhlIGZhY3RvciB3aXRoIHRoZSBsYXJnZXN0IHBvc2l0aXZlIGZhY3RvciBsb2FkaW5nLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG1lbnRhbCBjYXBhY2l0eSBfZmVlbCBoYXBweV8gaGFkIGxvYWRpbmdzIG9mIDAuNjAgb24gdGhlIEJPRFkgZmFjdG9yLCAwLjcwIG9uIHRoZSBIRUFSVCBmYWN0b3IsIGFuZCAwLjMwIG9uIHRoZSBNSU5EIGZhY3RvciwgSSB3b3VsZCBzb3J0IGl0IGludG8gdGhlIEhFQVJUIGNhdGVnb3J5LiBGb3IgZWFjaCBmYWN0b3IsIEkgdGFrZSB0aGUgc2l4IGhpZ2hlc3QtbG9hZGluZyBpdGVtcyBhcyBhIGNhbmRpZGF0ZSBzY2FsZSwgdGhlbiAiZHJvcCIgdGhlIGNhcGFjaXRpZXMgd2l0aCB0aGUgc21hbGxlc3QgZmFjdG9yIGxvYWRpbmdzIG9uIHRoZWlyIHJlc3BlY3RpdmUgZG9taW5hbnQgZmFjdG9ycyB1bnRpbCBJIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGluIGVhY2ggY2F0ZWdvcnkuIEZvciBleGFtcGxlLCBpZiB0aGUgQk9EWSBmYWN0b3Igd2VyZSB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBuaW5lIG1lbnRhbCBjYXBhY2l0aWVzLCB0aGUgSEVBUlQgZmFjdG9yIGZvciBzaXggbWVudGFsIGNhcGFjaXRpZXMsIGFuZCB0aGUgTUlORCBmYWN0b3IgZm9yIGZpdmUgY2FwYWNpdGllcywgZm9yIGVhY2ggZmFjdG9yIEkgd291bGQga2VlcCBvbmx5IHRoZSBjYXBhY2l0aWVzIHdpdGggdGhlIGZpdmUgaGlnaGVzdCBwb3NpdGl2ZSBsb2FkaW5ncyBvbiB0aGF0IGZhY3RvciwgaW4gb3JkZXIgdG8gY29uc3RydWN0IHRocmVlIHNjYWxlcyBvZiBlcXVhbCBsZW5ndGggKGFuZCBhIG1heGltdW0gbGVuZ3RoIG9mIHNpeCBpdGVtcykuCgpUbyBjYWxjdWxhdGUgc2NvcmVzIG9uIHRoZXNlIHNjYWxlcywgSSB0YWtlIHRoZSBhdmVyYWdlIG9mIGFsbCBvZiBtZW50YWwgY2FwYWNpdGllcyBmb3IgZWFjaCBzY2FsZS4gVGhpcyB5aWVsZHMgYSBkYXRhc2V0IGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgaXMgYXNzb2NpYXRlZCB3aXRoIG9uZSBzY29yZSBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyBpZGVudGlmaWVkIGluIHRoZSByZWxhdGl2ZSBFRkEgc29sdXRpb24sIGZvciBlYWNoIG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVycyB0aGF0IHRoYXQgcGFydGljaXBhbnQgYXNzZXNzZWQuCgpJbiB0aGlzIGNoYXB0ZXIsIEkgYXBwbHkgdGhpcyBtZXRob2QgdG8gYWxsIG9mIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb25zIGZvciBhZHVsdCBzYW1wbGVzIGFzIHByZXNlbnRlZCBpbiBDaGFwdGVyIElJIChTdHVkaWVzIDEtNCksIHlpZWxkaW5nIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY29yZXMgZm9yIGVhY2ggdGFyZ2V0IGNoYXJhY3RlciBhcyBhc3Nlc3NlZCBieSBlYWNoIHBhcnRpY2lwYW50LiAoSSBpZ25vcmUgdGhlIGFiZXJyYW50IGZvdXItZmFjdG9yIHNvbHV0aW9uIGZvciBhZHVsdHMgaW4gU3R1ZHkgMiBzdWdnZXN0ZWQgYnkgb25lIG9mIHRoZSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBjb25zaWRlcmVkIGluIHRoYXQgY2hhcHRlciwgc2luY2UgdGhpcyB3YXMgdGhlIG9ubHkgc3R1ZHkgb3V0IG9mIHRoZSBzZXZlbiBjb25zaWRlcmVkIGluIHdoaWNoIGEgZm91ci1mYWN0b3Igc29sdXRpb24gYXBwZWFyZWQgdG8gYWRkIGFueSB2YWx1ZSBiZXlvbmQgdGhlIHJvYnVzdCBCT0RZLUhFQVJULU1JTkQgZnJhbWV3b3JrIGNvbW1vbiB0byBhbGwgc3R1ZGllcy4gW1hYIEFQUEVORElYIEI/XSkKCkZvciBjaGlsZCBzYW1wbGVzLCBJIGFwcGx5IHRoaXMgbWV0aG9kIGJvdGggdG8gdGhlIHNvbHV0aW9ucyBlbWVyZ2luZyBmcm9tIGNoaWxkcmVuJ3Mgb3duIGRhdGEgYW5kIHRvIHRoZSBjb3JyZXNwb25kaW5nIF9hZHVsdF8gc29sdXRpb25zIGZvciB0aGUgc3R1ZGllcyBpbiBxdWVzdGlvbi4gVGhpcyBhbGxvd3MgbWUgdG8gZXhwbG9yZSBib3RoIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGNoaWxkcmVuJ3Mgb3duIGNvbmNlcHR1YWwgdW5pdHMsIGFuZCB0aGUgcmVsYXRpb25zaGlwcyBhbW9uZyBhIGZ1bGx5IGFkdWx0LWxpa2Ugc2V0IG9mIGNvbmNlcHR1YWwgdW5pdHMgKHByZXN1bWFibHksIHRoZSBjb25jZXB0dWFsIHVuaXRzIHRoYXQgdGhlc2UgY2hpbGRyZW4gd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYWdyZWUgb24gYXMgdGhleSBtYXR1cmUgaW50byBhZHVsdHMpLiAKCkZvciAib2xkZXIiIGNoaWxkcmVuICg3LTl5IG9mIGFnZTsgU3R1ZGllcyAyIGFuZCAzKSwgdGhpcyBtZWFucyBleGFtaW5pbmcgdHdvIHNldHMgb2YgdGhyZWUgY29uY2VwdHVhbCB1bml0cyBmb3IgZWFjaCBzYW1wbGUgb2YgY2hpbGRyZW46ICgxKSBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYXMgZGVmaW5lZCBieSBhZHVsdHMgaW4gdGhhdCBzdHVkeTsgYW5kICgyKSBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYXMgZGVmaW5lZCBieSB0aGUgY2hpbGRyZW4gdGhlbXNlbHZlcy4gQmVjYXVzZSB0aGUgRUZBcyBmb3Igb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cyBhcmUgc28gc2ltaWxhciAoc2VlIENoYXB0ZXIgSUkpLCBJIGV4cGVjdCB0aGUgb3V0Y29tZXMgb2YgdGhlc2UgdHdvIGFwcHJvYWNoZXMgdG8gY29uc3RydWN0aW5nIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY2FsZXMgdG8geWllbGQgdmVyeSBzaW1pbGFyIHJlc3VsdHMgaW4gdGhpcyBhZ2UgZ3JvdXAuCgpGb3IgInlvdW5nZXIiIGNoaWxkcmVuLCB0aGlzIG1lYW5zIGV4YW1pbmluZyBtdWx0aXBsZSBzZXRzIG9mIGNvbmNlcHR1YWwgdW5pdHMgZm9yIGVhY2ggc2FtcGxlIG9mIGNoaWxkcmVuLCBpbmNsdWRpbmcgKDEpIEJPRFksIEhFQVJULCBhbmQgTUlORCBhcyBkZWZpbmVkIGJ5IGFkdWx0cyBpbiB0aGF0IHN0dWR5OyBhbmQgKDIpIHZhcnlpbmcgc2V0cyBvZiAyLTQgY29uY2VwdHVhbCB1bml0cyBhcyBkZWZpbmVkIGJ5IEVGQSBvZiBjaGlsZHJlbidzIG93biByZXNwb25zZXMsIHVzaW5nIGRpZmZlcmVudCBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scy4gVGhlIEVGQXMgb2YgeW91bmdlciBjaGlsZHJlbidzIHJlc3BvbnNlcyAgd2VyZSBsZXNzIHJlbGlhYmxlLCBhbmQgbGVzcyBhZHVsdC1saWtlLCB0aGFuIHRob3NlIG9mIG9sZGVyIGNoaWxkcmVuLiBBcyBhIGNvbnNlcXVlbmNlLCBJIGV4cGVjdCB0aGUgb3V0Y29tZXMgb2YgdGhlc2UgZGlmZmVyZW50IGFwcHJvYWNoZXMgdG8gY29uc3RydWN0aW5nIHNjYWxlcyBmb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQgdG8geWllbGQgcmF0aGVyIGRpZmZlcmVudCByZXN1bHRzIGluIHRoaXMgYWdlIGdyb3VwLgoKVGhlIHJlYWRlciBzaG91bGQgbm90ZSB0aGF0IHRoaXMgaXMgZmFyIGZyb20gdGhlIG9ubHkgd2F5IHRvIGFwcHJvYWNoICJzY29yaW5nIiBwYXJ0aWNpcGFudHMgb24gdGhlc2UgY29uY2VwdHVhbCB1bml0cy4gSW4gcGFydGljdWxhciwgSSBjb3VsZCBoYXZlIGV4YW1pbmVkIGZhY3RvciBzY29yZXPigJRzdW1tYXJpZXMgb2YgZWFjaCBmYWN0b3IgKGNvbmNlcHR1YWwgdW5pdCkgYmFzZWQgb24gYSBwYXJ0aWNpcGFudCdzIHJlc3BvbnNlcyB0byBhbGwgbWVudGFsIGNhcGFjaXRpZXMgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYWxsIG1lbnRhbCBjYXBhY2l0aWVzIGFuZCBhbGwgZmFjdG9ycyBpbmNsdWRlZCBpbiB0aGF0IEVGQSBzb2x1dGlvbuKAlHJhdGhlciB0aGFuIGNvbnN0cnVjdGluZyAic2NhbGVzIiBpbiB0aGUgd2F5IEkgaGF2ZSBqdXN0IG91dGxpbmVkLiBIb3dldmVyLCBtdWNoIGxpa2UgX3pfLXNjb3JlcywgZmFjdG9yIHNjb3JlcyBpbmRpY2F0ZSB3aGVyZSBhIHBhcnRpY2lwYW50IGZhbGxzIGluIHJlbGF0aW9uIHRvIG90aGVyIHBhcnRpY2lwYW50cyBpbiB0aGUgc2FtcGxlLCBhbmQgZG8gbm90IHByb3ZpZGUgdGhlIGtpbmQgb2YgYWJzb2x1dGUgc2NvcmUgdGhhdCBpcyBrZXkgdG8gbXkgZ29hbCBpbiB0aGlzIGNoYXB0ZXIsIHdoaWNoIGlzIHRvIGFuYWx5emUgcmVsYXRpb25zaGlwcyBhbW9uZyBmYWN0b3JzIGluIHRlcm1zIG9mIHRoZSBleHRlbnQgdG8gd2hpY2ggaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgaW5kaWNhdGVkIHRoYXQgdGFyZ2V0IGNoYXJhY3RlcnMgInBvc3Nlc3NlZCIgdGhlIGNvbmNlcHR1YWwgdW5pdHMgQk9EWSwgSEVBUlQsIGFuZCBNSU5ELiBbWFggQVBQRU5ESVggQj9dCgpFdmVuIHdpdGhpbiB0aGUgInNjYWxlIiBhcHByb2FjaCBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uLCB0aGVyZSBhcmUgbWFueSBwYXJhbWV0ZXJzIG9mIHRoaXMgYW5hbHlzaXMgdGhhdCBJIGNvdWxkIGhhdmUgc2V0IGRpZmZlcmVudGx5LiBGb3IgZXhhbXBsZSwgSSBjb3VsZCBoYXZlIGNvbnNpZGVyZWQgYWJzb2x1dGUgZmFjdG9yIGxvYWRpbmdzIHJhdGhlciB0aGFuIHJhdyBmYWN0b3IgbG9hZGluZ3MsIHdoaWNoIHdvdWxkIGFsbG93IGZvciBtZW50YWwgY2FwYWNpdGllcyB0aGF0IGxvYWRlZCBlc3BlY2lhbGx5IHN0cm9uZ2x5IF9uZWdhdGl2ZWx5XyBvbiBhIHBhcnRpY3VsYXIgZmFjdG9yIHRvIGNvbnRyaWJ1dGUgKG5lZ2F0aXZlbHkpIHRvIHNjb3JlcyBvbiB0aGF0IGNvbmNlcHR1YWwgdW5pdDsgSSBjb3VsZCBoYXZlIG9taXR0ZWQgdGhlIHN0ZXAgb2YgbWFraW5nIHRoZSBzY2FsZXMgZm9yIGFsbCBmYWN0b3JzIHdpdGhpbiBhIHNpbmdsZSBFRkEgc290bHVpb24gZXF1YWwgbGVuZ3RoOyBJIGNvdWxkIGhhdmUgY2hvc2VuIHRvIHVzZSBvbmx5IHRoZSB0b3AgNCBvciA1IG1lbnRhbCBjYXBhY2l0aWVzIGFjcm9zcyBhbGwgRUZBIHNvbHV0aW9ucywgb3IgdG8gc2V0IG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzY2FsZTsgb3IgSSBjb3VsZCBoYXZlIGltcGxlbWVudGVkIGFic29sdXRlIHRocmVzaG9sZHMgZm9yIGhvdyBzdHJvbmdseSBhIG1lbnRhbCBjYXBhY2l0eSBtdXN0IGxvYWQgb24gYSBmYWN0b3IgaW4gb3JkZXIgdG8gY291bnQgdG93YXJkIHRoZSBzY29yZSBmb3IgdGhhdCBjb25jZXB0dWFsIHVuaXQsIG9yIGFic29sdXRlIGxpbWl0cyBvbiB0aGUgZGVncmVlIHRvIHdoaWNoIGEgbWVudGFsIGNhcGFjaXR5IGNhbiAiY3Jvc3MtbG9hZCIgb24gbm9uLWRvbWluYW50IGZhY3RvcnMgYW5kIHN0aWxsIGNvdW50IHRvd2FyZCB0aGUgc2NvcmUgZm9yIGFueSBvbmUgY29uY2VwdHVhbCB1bml0LiBbWFggQVBQRU5ESVggQj9dIEhvd2V2ZXIsIHRoZXNlIGtpbmRzIG9mIGRldGFpbHMgZGlmZmVyIHF1aXRlIGRyYW1hdGljYWxseSBhY3Jvc3Mgc3R1ZGllcyBhbmQgYWdlIGdyb3Vwcy4gRm9yIGV4YW1wbGUsIGluIHNvbWUgc2FtcGxlcyB0aGVyZSBhcmUgbm8gc3Ryb25nIG5lZ2F0aXZlIGZhY3RvciBsb2FkaW5ncywgYW5kIGluIG90aGVycyB0aGVyZSBhcmU7IGlmIEkgY29uc2lkZXJlZCBhYnNvbHV0ZSBsb2FkaW5ncyByYXRoZXIgdGhhbiByYXcgbG9hZGluZ3MsIEkgY291bGQgZW5kIHVwIGNvbXBhcmluZyBzY29yZXMgZnJvbSBhICJiaXBvbGFyIiBzY2FsZSBpbiBvbmUgc2FtcGxlIHRvIHNjb3JlcyBmcm9tIGEgInVuaXBvbGFyIiBzY2FsZXMgaW4gYW5vdGhlciBzYW1wbGUsIG1ha2luZyB0aGUgY29tcGFyaXNvbiBtb3JlIGRpZmZpY3VsdCB0byBpbnRlcnByZXQuIExpa2V3aXNlLCBzb21lIEVGQSBzb2x1dGlvbnMgdGVuZGVkIHRvIGZlYXR1cmUgZ2VuZXJhbGx5IHdlYWtlciBmYWN0b3IgbG9hZGluZ3MgdGhhbiBvdGhlcnM7IGlmIEkgd2VyZSB0byBpbXBvc2UgYWJzb2x1dGUgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVuZ3RoIG9mIGZhY3RvciBsb2FkaW5ncywgSSBjb3VsZCBlbmQgdXAgY29tcGFyaW5nIHNjb3JlcyBmcm9tIHNjYWxlcyBvZiB3aWxkbHkgZGlmZmVyZW50IGxlbmd0aHMgYWNyb3NzIHNhbXBsZXMuIEluIG15IHZpZXcsIHRoZSBhbmFseXNpcyBkZWNpc2lvbnMgb3V0bGluZWQgYWJvdmUgbWF4aW1pemUgY29tcGFyYWJpbGl0eSBhY3Jvc3Mgc3R1ZGllcyBhbmQgYWdlIGdyb3Vwc+KAlHRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFwdGVyLiAoTm90ZSwgaG93ZXZlciwgdGhhdCBpbiB0aGUgYW5hbHlzaXMgY29kZSBmb3IgdGhpcyBjaGFwdGVyIEkgaGF2ZSBpbmNsdWRlZCBlYXN5IHNob3J0IGN1dHMgZm9yIHRoZSBpbnRlcmVzdGVkIHJlYWRlciB0byBleHBsb3JlIGRpZmZlcmVudCBvcHRpb25zIGZvciBlYWNoIG9mIHRoZXNlIHBhcmFtZXRlcnMuKQoKYGBge3J9CiMgc2VlICIuL3NjcmlwdHMvb3JnX3BhcmFtLlIiIGZvciBwYXJhbWV0ZXIgc2V0dGluZwpgYGAKCiMjIyBWaXN1YWxpemluZyByZWxhdGlvbnNoaXBzCgpYWAoKb3V0bGluZToKCi0gZm9yIGFueSBzYW1wbGUsIEkgaGF2ZSBpZGVudGlmaWVkIHJlbGV2YW50IGNvbmNlcHR1YWwgdW5pdHMgKGNoYXB0ZXIgSUkpIGFuZCBzY29yZWQgZWFjaCBwYXJ0aWNpcGFudCdzIGVuZG9yc2VtZW50IG9mIGVhY2ggb2YgdGhlc2UgdW5pdHMgZm9yIHRoZWlyIGFzc2lnbmVkIHRhcmdldCBjaGFyYWN0ZXIocykgKHByZXZpb3VzIHNlY3Rpb24pCi0gbm93LCBJIHdhbnQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIHRoZXNlIGVuZG9yc2VtZW50cyAKLSBidXQgSSBkb24ndCByZWFsbHkga25vdyB3aGF0IHRvIGV4cGVjdCwgYW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMgY291bGQgYmUgdmVyeSBjb21wbGV4Ci0gc28sIHN0YXJ0IHdpdGggaG9saXN0aWMsIGV4cGxvcmF0b3J5IHZpc3VhbGl6YXRpb246IHNjYXR0ZXJwbG90cyBvZiBwYWlycyBvZiBjb25jZXB0dWFsIHVuaXRzCgoKIyMjIFRhcmdldGluZyB0aGUgcG9zc2liaWxpdHkgb2YgYXN5bW1ldHJpZXMKClhYCgpvdXRsaW5lOgoKLSBub3csIGEgbW9yZSB0YXJnZXRlZCBhcHByb2FjaCB0byBvbmUgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlc2UgcmVsYXRpb25zaGlwczogYXN5bW1ldHJpZXMKLSByZW1pbmRlciBvZiBiYXNpYyBpbnR1aXRpb246IGluIHRoaXMgc2FtcGxlLCBkbyBwYXJ0aWNpcGFudHMgdGVuZCB0byBlbmRvcnNlIEEgd2l0aG91dCBCPyBCIHdpdGhvdXQgQT8gaXMgdGhlcmUgYW4gYXN5bW1ldHJ5IGhlcmU/Ci0gY29ubmVjdCB0byB0aGUgdmlzdWFsaXphdGlvbnM6IGFzeW1tZXRyaWVzIG9mIHBvaW50cyBhcm91bmQgdGhlIHk9eCBsaW5lIG9mIGVxdWl2YWxlbmNlCi0gb25lIHdheSB0byBib2lsIHRoaXMgZG93biB0byBhIG51bWJlcjogZGlmZmVyZW5jZSBzY29yZXMgKGZvciBlYWNoIHBhaXIpLCBjb21wYXJpc29ucyB0byAwIHZpYSBiYXllc2lhbiByZWdyZXNzaW9ucwotIGZvciBhbnkgcGFpcjogaWYgMCwgbm8gZXZpZGVuY2UgZm9yIGhpZXJhcmNoeS4gaWYgbm9uLXplcm8sIHNvbWUgZXZpZGVuY2UuCi0gY29tcGFyaXNvbnMgYWNyb3NzIHBhaXJzOiBmdXJ0aGVyIGZyb20gMCwgbW9yZSBoaWVyYXJjaGljYWwuCi0gY2F2ZWF0IDE6IHRoZXNlIGFyZSBwb3N0LWhvYyBhbmFseXNlcyEgYnV0IHN0aWxsIHVzaW5nIGNvbmZpcm1hdG9yeSBzdGF0cy4gCi0gY2F2ZWF0IDI6IHNjb3JlcyBvZiAoMCwwKSB0cmVhdGVkIHNhbWUgYXMgc2NvcmVzIG9mICg2LDYpLCBvciBhbnl3aGVyZSBpbiBiZXR3ZWVuLgoKCiMgU3R1ZHkgMTogQW4gYWR1bHQgZW5kcG9pbnQKCkluIHRoZSBjb250ZXh0IG9mIHRoaXMgZGlzc2VydGF0aW9uLCBTdHVkeSAxIHNlcnZlcyB0aGUgcm9sZSBvZiBkZXNjcmliaW5nIGEgZGV2ZWxvcG1lbnRhbCBlbmRwb2ludCBmb3IgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoZXNlIHN0dWRpZXMgY2FuIHJldmVhbCBhYm91dCB0aGUgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29uY2VwdHVhbCB1bml0cyBkaXNjdXNzZWQgaW4gQ2hhcHRlciBJSUkuIFRoZXNlIGFuYWx5c2VzIHdlcmUgbm90IHBhcnQgb2YgdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9uIG9mIHRoZXNlIHN0dWRpZXMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4KCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgbm90ZWQgaW4gQ2hhcHRlciBJSSwgaW4gdGhlIG9yaWdpbmFsIGFuYWx5c2lzIG9mIHRoZXNlIGRhdGFzZXRzIHJlc3BvbnNlcyB3ZXJlIHJlY29kZWQgdG8gcnVuIGZyb20gLTMgdG8gKzMgYmVmb3JlIGFuYWx5c2VzIChXZWlzbWFuIGV0IGFsLiwgMjAxNyk7IGluIHRoaXMgZGlzc2VydGF0aW9uLCBJIG1haW50YWluIHRoZSAwLTYgY29kaW5nIGZvciBjb21wYXJhYmlsaXR5IHRvIFN0dWRpZXMgMi00LgoKIyMgUmVzdWx0cwoKIyMjIFN0dWR5IDFhCgpJbiBTdHVkeSAxYSwgYHIgbnJvdyhkMWFfYWRfd2lkZSlgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBlaXRoZXIgYSBiZWV0bGUgb3IgYSByb2JvdC4gKFNlZSBDaGFwdGVyIElJIGFuZCBXZWlzbWFuIGV0IGFsLiwgMjAxNywgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kMWFfYWQgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDFhX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQpCmQxYV9hZF9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQxYV9hZCwgc2NhbGVzX2VmYV93ZG1fZDFhX2FkKQoKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kMWFfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2QxYV9hZCIpCnNhdmVSRFMoZDFhX2FkX3Njb3JlZF9hZCwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kMWFfYWRfc2NvcmVkX2FkIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDFhX2FkICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMS4KCiMjIyMgVmlzdWFsaXphdGlvbgoKWFgKCmBgYHtyfQpwbG90c19kMWFfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDFhX2FkX3Njb3JlZF9hZCkKYGBgCgpgYGB7cn0KZmlnX2QxYV9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDFhX2FkX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFhX2FkX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFhX2FkX3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDFhX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QxYV9hZF9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kMWFfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDFhX2FkX3Bsb3RzLCBmaWdfZDFhX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDFhX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMWE6IEFkdWx0cyIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDFhX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoZmlnX2QxYV9hZF90aXRsZSwgZmlnX2QxYV9hZF9wbG90c19sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKClhYCgpgYGB7cn0KZDFhX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQxYV9hZF9zY29yZWRfYWQpCnNhdmVSRFMoZDFhX2FkX3Njb3JlZF9hZF9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDFhX2FkX3Njb3JlZF9hZF9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kMWFfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQxYV9hZF9zY29yZWRfYWRfZGlmZikKYGBgCgpgYGB7cn0KIyByX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMgU3R1ZHkgMWIKClN0dWR5IDFiIHdhcyBhIGRpcmVjdCByZXBsaWNhdGlvbiBvZiBTdHVkeSAxYTogYHIgbnJvdyhkMWJfYWRfd2lkZSlgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgKGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90KSBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gKFNlZSBDaGFwdGVyIElJIGFuZCBXZWlzbWFuIGV0IGFsLiwgMjAxNywgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kMWJfYWQgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDFiX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQpCmQxYl9hZF9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQxYl9hZCwgc2NhbGVzX2VmYV93ZG1fZDFiX2FkKQoKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kMWJfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2QxYl9hZCIpCnNhdmVSRFMoZDFiX2FkX3Njb3JlZF9hZCwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kMWJfYWRfc2NvcmVkX2FkIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDFiX2FkICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMS4KCiMjIyMgVmlzdWFsaXphdGlvbgoKWFgKCmBgYHtyfQpwbG90c19kMWJfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDFiX2FkX3Njb3JlZF9hZCkKYGBgCgpgYGB7cn0KZmlnX2QxYl9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDFiX2FkX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFiX2FkX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFiX2FkX3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQjEiLCAiQjIiLCAiQjMiKSwgbmNvbCA9IDMpCgpmaWdfZDFiX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QxYl9hZF9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kMWJfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDFiX2FkX3Bsb3RzLCBmaWdfZDFiX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDFiX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMWI6IEFkdWx0cyIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDFiX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoZmlnX2QxYl9hZF90aXRsZSwgZmlnX2QxYl9hZF9wbG90c19sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKClhYCgpgYGB7cn0KZDFiX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQxYl9hZF9zY29yZWRfYWQpCnNhdmVSRFMoZDFiX2FkX3Njb3JlZF9hZF9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDFiX2FkX3Njb3JlZF9hZF9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kMWJfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQxYl9hZF9zY29yZWRfYWRfZGlmZikKYGBgCgpgYGB7cn0KIyByX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMgU3R1ZHkgMWMKCkluIFN0dWR5IDFjLCBgciBucm93KGQxY19hZF93aWRlKS8yYCBVUyBhZHVsdHMgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIExpa2UgU3R1ZGllcyAxYSBhbmQgMWIsIHRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2g7IGJ1dCBpbiB0aGlzIHN0dWR5LCBhbGwgcGFydGljaXBhbnRzIGFzc2Vzc2VkIGJvdGggb2YgdGhlc2UgdGFyZ2V0IGNoYXJhY3RlcnMgc2lkZSBieSBzaWRlICh3aXRoIGxlZnQtcmlnaHQgcG9zaXRpb24gY291bnRlcmJhbGFuZWQgYWNyb3NzIHBhcnRpY2lwYW50cykuIChTZWUgQ2hhcHRlciBJSSBhbmQgV2Vpc21hbiBldCBhbC4sIDIwMTcsIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDFjX2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QxY19hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkKQpkMWNfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMWNfYWQsIHNjYWxlc19lZmFfd2RtX2QxY19hZCkKCnNhdmVSRFMoc2NhbGVzX2VmYV93ZG1fZDFjX2FkLCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3dkbV9kMWNfYWQiKQpzYXZlUkRTKGQxY19hZF9zY29yZWRfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDFjX2FkX3Njb3JlZF9hZCIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkKWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2QxY19hZCAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjEuCgojIyMjIFZpc3VhbGl6YXRpb24KClhYCgpgYGB7cn0KcGxvdHNfZDFjX2FkX3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQxY19hZF9zY29yZWRfYWQpCmBgYAoKYGBge3J9CmZpZ19kMWNfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QxY19hZF9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxY19hZF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxY19hZF9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkMxIiwgIkMyIiwgIkMzIiksIG5jb2wgPSAzKQoKZmlnX2QxY19hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kMWNfYWRfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDFjX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QxY19hZF9wbG90cywgZmlnX2QxY19hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QxY19hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDFjOiBBZHVsdHMiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QxY19hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kMWNfYWRfdGl0bGUsIGZpZ19kMWNfYWRfcGxvdHNfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpYWAoKYGBge3J9CmQxY19hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkMWNfYWRfc2NvcmVkX2FkKQpzYXZlUkRTKGQxY19hZF9zY29yZWRfYWRfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QxY19hZF9zY29yZWRfYWRfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDFjX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkMWNfYWRfc2NvcmVkX2FkX2RpZmYpCmBgYAoKYGBge3J9CiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QxY19hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QxY19hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QxY19hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyBTdHVkeSAxZAoKSW4gU3R1ZHkgMWQsIGByIG5yb3coZDFkX2FkX3dpZGUpYCBVUyBhZHVsdHMgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBVbmxpa2UgU3R1ZGllcyAxYS0xYywgdGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgIm1hbnkgY2hhcmFjdGVycyIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgaW4gd2hpY2ggcGFydGljaXBhbnRzIHdlcmUgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIG9uZSBvZiB0aGUgZm9sbG93aW5nIDIxIHRhcmdldCBjaGFyYWN0ZXJzOiBhbiBhZHVsdCwgYSBjaGlsZCwgYW4gaW5mYW50LCBhIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgYSBmZXR1cywgYSBjaGltcGFuemVlLCBhbiBlbGVwaGFudCwgYSBkb2xwaGluLCBhIGJlYXIsIGEgZG9nLCBhIGdvYXQsIGEgbW91c2UsIGEgZnJvZywgYSBibHVlIGpheSwgYSBmaXNoLCBhIGJlZXRsZSwgYSBtaWNyb2JlLCBhIHJvYm90LCBhIGNvbXB1dGVyLCBhIGNhciwgb3IgYSBzdGFwbGVyLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QxZF9hZCA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kMWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZCkKZDFkX2FkX3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDFkX2FkLCBzY2FsZXNfZWZhX3dkbV9kMWRfYWQpCgpzYXZlUkRTKHNjYWxlc19lZmFfd2RtX2QxZF9hZCwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDFkX2FkIikKc2F2ZVJEUyhkMWRfYWRfc2NvcmVkX2FkLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QxZF9hZF9zY29yZWRfYWQiKQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZClgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kMWRfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4xLgoKIyMjIyBWaXN1YWxpemF0aW9uCgpYWAoKYGBge3J9CnBsb3RzX2QxZF9hZF9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkMWRfYWRfc2NvcmVkX2FkLCBjb2xvcnMgPSBjb2xvcnMyMSkKYGBgCgpgYGB7cn0KZmlnX2QxZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDFkX2FkX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFkX2FkX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDFkX2FkX3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiRDEiLCAiRDIiLCAiRDMiKSwgbmNvbCA9IDMpCgpmaWdfZDFkX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QxZF9hZF9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMyMSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDcpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMyMSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDcpKSkKCmZpZ19kMWRfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDFkX2FkX3Bsb3RzLCBmaWdfZDFkX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4yKSkKCmZpZ19kMWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAxZDogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kMWRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZChmaWdfZDFkX2FkX3RpdGxlLCBmaWdfZDFkX2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKWFgKCmBgYHtyfQpkMWRfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDFkX2FkX3Njb3JlZF9hZCkKc2F2ZVJEUyhkMWRfYWRfc2NvcmVkX2FkX2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kMWRfYWRfc2NvcmVkX2FkX2RpZmYiKQpgYGAKCmBgYHtyfQpwbG90X2QxZF9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDFkX2FkX3Njb3JlZF9hZF9kaWZmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczIxLCB3aWQgPSAwLjkpCmBgYAoKYGBge3J9CiMgcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjIxKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpKQoKcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpKQoKIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgpyX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpKQoKIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjIxKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpKQoKcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpKQoKIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMgRGlzY3Vzc2lvbgoKWFgKCmBgYHtyfQpzY2FsZXNfc3R1ZHkxIDwtIGJpbmRfcm93cyhzY2FsZXNfZWZhX3dkbV9kMWFfYWQgJT4lIG11dGF0ZShzdHVkeSA9ICJTdHVkeSAxYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kMWJfYWQgJT4lIG11dGF0ZShzdHVkeSA9ICJTdHVkeSAxYiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kMWNfYWQgJT4lIG11dGF0ZShzdHVkeSA9ICJTdHVkeSAxYyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kMWRfYWQgJT4lIG11dGF0ZShzdHVkeSA9ICJTdHVkeSAxZCIpKSAlPiUKICBzZWxlY3QoLWMobG9hZGluZywgb3JkZXIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNwcmVhZChzdHVkeSwgZmFjdG9yKSAlPiUKICBtdXRhdGUodXJfZmFjdG9yID0gaWZlbHNlKCFpcy5uYShgU3R1ZHkgMWFgKSwgYFN0dWR5IDFhYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSghaXMubmEoYFN0dWR5IDFiYCksIGBTdHVkeSAxYmAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKCFpcy5uYShgU3R1ZHkgMWNgKSwgYFN0dWR5IDFjYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFN0dWR5IDFkYCkpKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QxYV9hZCAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcjFhID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDFiX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyMWIgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kMWNfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXIxYyA9IG9yZGVyKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QxZF9hZCAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcjFkID0gb3JkZXIpKSAlPiUKICBhcnJhbmdlKHVyX2ZhY3Rvciwgb3JkZXIxYSwgb3JkZXIxYiwgb3JkZXIxYywgb3JkZXIxZCkgJT4lCiAgc2VsZWN0KC1jKHVyX2ZhY3Rvciwgc3RhcnRzX3dpdGgoIm9yZGVyIikpKQpgYGAKCmBgYHtyfQp0YWJsZTQuMSA8LSBzY2FsZXNfc3R1ZHkxICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jYXBhY2l0eSksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKGlzLm5hKC4pLCAiIiwgIuKckyIpKSkgJT4lCiAgcmVuYW1lKENhcGFjaXR5ID0gY2FwYWNpdHkpICU+JQogIGthYmxlKGZvcm1hdCA9ICJodG1sIiwgCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA0LjE6IFNjYWxlcyBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyAoZmFjdG9ycykgaWRlbnRpZmllZCBieSBFRkEgZm9yIFVTIEFkdWx0cyBpbiBTdHVkaWVzIDFhLTFkIChzZWUgQ2hhcHRlciBJSUkpLiBBIGNoZWNrbWFyayBpbmRpY2F0ZXMgdGhhdCBhIG1lbnRhbCBjYXBhY2l0eSB3YXMgaW5jbHVkZWQgaW4gYSBzY2FsZSBmb3IgYSBwYXJ0aWN1bGFyIHN0dWR5LiIpICU+JSAgCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIkJPRFkgc2NhbGUiLCAxLCA5KSAlPiUKICBncm91cF9yb3dzKCJIRUFSVCBzY2FsZSIsIDEwLCAxNykgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDE4LCAyNikKYGBgCgpgYGB7ciB0YWJsZTQuMSwgaW5jbHVkZSA9IFR9CnRhYmxlNC4xCmBgYAoKYGBge3J9CmZpZ3VyZTQuMSA8LSBwbG90X2dyaWQoZmlnX2QxYV9hZF9wbG90c19sZWdfdGl0bGUsIGZpZ19kMWJfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kMWNfYWRfcGxvdHNfbGVnX3RpdGxlLCBmaWdfZDFkX2FkX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAxLCAxLCAxLjE1KSkKCmZpZ3VyZTQuMV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjEsIHN0cl93cmFwKCJGaWd1cmUgNC4xOiBSZWxhdGlvbnNoaXBzIGFtb25nIFVTIGFkdWx0cycgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZGllcyAxYS0xZCwgb3JnYW5pemVkIGJ5IHN0dWR5IChyb3dzKSBhbmQgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjh9CmdnZHJhdyhmaWd1cmU0LjFfY2FwKQpgYGAKCmBgYHtyfQpmaWd1cmU0LjJfcGxvdHMxMjMgPC0gcGxvdF9ncmlkKHBsb3RfZDFhX2FkX3Njb3JlZF9hZF9kaWZmICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDFhOiBBZHVsdHMiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2QxYl9hZF9zY29yZWRfYWRfZGlmZiArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFicyh0aXRsZSA9ICJTdHVkeSAxYjogQWR1bHRzIikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2QxY19hZF9zY29yZWRfYWRfZGlmZiArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFicyh0aXRsZSA9ICJTdHVkeSAxYzogQWR1bHRzIikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDMsIHJlbF93aWR0aHMgPSBjKDEsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTQuMl9wbG90czEyM19sZWcgPC0gcGxvdF9ncmlkKGZpZ3VyZTQuMl9wbG90czEyMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2xlZ2VuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2QxYV9hZF9zY29yZWRfYWRfZGlmZiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmU0LjJfcGxvdHM0IDwtIHBsb3RfZ3JpZChwbG90X2QxZF9hZF9zY29yZWRfYWRfZGlmZiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFicyh0aXRsZSA9ICJTdHVkeSAxZDogQWR1bHRzIikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJEIikKCmZpZ3VyZTQuMl9wbG90czRfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmU0LjJfcGxvdHM0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2xlZ2VuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9kMWRfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMikpCgpmaWd1cmU0LjJfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZ3VyZTQuMl9wbG90czEyM19sZWcsIGZpZ3VyZTQuMl9wbG90czRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMS4xKSkKCmZpZ3VyZTQuMl9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjJfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNC4yOiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIFVTIGFkdWx0cycgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZGllcyAxYS0xZC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEsIHN1Y2ggdGhhdCBkaWZmZXJlbmNlIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIC0xIHRvICsxLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gZGlmZmVyZW5jZSBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQgKGkuZS4sIGEgZGlmZmVyZW5jZSBzY29yZSBvZiAwKS4iLCAxNDApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTQuMl9jYXApCmBgYAoKCiMgU3R1ZHkgMjogQ29uY2VwdHVhbCBjaGFuZ2UgYmV0d2VlbiBtaWRkbGUgY2hpbGRob29kICg3LTl5KSBhbmQgYWR1bHRob29kCgpJbiBTdHVkeSAyLCBgciBucm93KGQyX2FkX3dpZGUpYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDJfNzlfd2lkZSlgIFVTIGNoaWxkcmVuIGJldHdlZW4gdGhlIGFnZXMgb2YgYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gVG8gbWFrZSB0aGUgc3R1ZHkgYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIGluIHRoaXMgYWdlIHJhbmdlLCB0aGUgd29yZGluZyBvZiBzb21lIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBlbXBsb3llZCBpbiBTdHVkeSAxIHdhcyBtb2RpZmllZCB0byB1c2UgbW9yZSBhZ2UtYXBwcm9wcmlhdGUgdm9jYWJ1bGFyeSwgYW5kIHBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSAzLXBvaW50IHNjYWxlICgibm8sIiBjb2RlZCBhcyAwOyAia2luZGEsIiBjb2RlZCBhcyAwLjUsICJ5ZXMsIiBjb2RlZCBhcyAxKS4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90LiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgojIyBSZXN1bHRzCgojIyMgQWR1bHRzCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QyX2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QyX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZCkKZDJfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMl9hZCwgc2NhbGVzX2VmYV93ZG1fZDJfYWQpCgpzYXZlUkRTKHNjYWxlc19lZmFfd2RtX2QyX2FkLCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3dkbV9kMl9hZCIpCnNhdmVSRFMoZDJfYWRfc2NvcmVkX2FkLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QyX2FkX3Njb3JlZF9hZCIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDJfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4yLgoKIyMjIyBWaXN1YWxpemF0aW9uCgpgYGB7cn0KcGxvdHNfZDJfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDJfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpmaWdfZDJfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QyX2FkX3Njb3JlZF9hZFtbMV1dICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDJfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1sxXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2QyX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QyX2FkX3Bsb3RzLCBmaWdfZDJfYWRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QyX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMjogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kMl9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kMl9hZF90aXRsZSwgZmlnX2QyX2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDJfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDJfYWRfc2NvcmVkX2FkKQpzYXZlUkRTKGQyX2FkX3Njb3JlZF9hZF9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDJfYWRfc2NvcmVkX2FkX2RpZmYiKQpgYGAKCmBgYHtyfQpwbG90X2QyX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkMl9hZF9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIyBDaGlsZHJlbiAoNy05eSkKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDJfNzkgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDJfNzksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyXzc5KQpkMl83OV9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQyXzc5LCBzY2FsZXNfZWZhX3dkbV9kMl9hZCkKZDJfNzlfc2NvcmVkXzc5IDwtIHNjb3JlX2Z1bihkMl83OSwgc2NhbGVzX2VmYV93ZG1fZDJfNzkpCgpzYXZlUkRTKHNjYWxlc19lZmFfd2RtX2QyXzc5LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3dkbV9kMl83OSIpCnNhdmVSRFMoZDJfNzlfc2NvcmVkX2FkLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QyXzc5X3Njb3JlZF9hZCIpCnNhdmVSRFMoZDJfNzlfc2NvcmVkXzc5LCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QyXzc5X3Njb3JlZF83OSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfNzkpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDJfNzkgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4yLgoKIyMjIyBWaXN1YWxpemF0aW9uCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKWFgKCmBgYHtyfQpwbG90c19kMl83OV9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkMl83OV9zY29yZWRfYWQpCmBgYAoKYGBge3J9CmZpZ19kMl83OV9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QyXzc5X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfNzlfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kMl83OV9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2QyXzc5X3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kMl83OV9zY29yZWRfYWRbWzFdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2QyXzc5X3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kMl83OV9zY29yZWRfYWRfcGxvdHMsIGZpZ19kMl83OV9zY29yZWRfYWRfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDJfNzlfc2NvcmVkX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMjogQ2hpbGRyZW4sIDctOXkgKHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcykiLCAKICAgICAgICAgICAgIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDJfNzlfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2QyXzc5X3Njb3JlZF9hZF90aXRsZSwgZmlnX2QyXzc5X3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KcGxvdHNfYWdlZ3BfZDJfc2NvcmVkX2FkIDwtIHJlbHZpel9hZ2VncF9mdW4oCiAgZF9zY29yZWQgPSBkMl9hZF9zY29yZWRfYWQgJT4lIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWQpLCAKICBhZ2VfZ3JvdXBzID0gYygiY2hpbGRyZW43OSIsICJhZHVsdHMiKSwKICBhZ2VfZ3JvdXBfbGFiZWxzID0gYygiQ2hpbGRyZW4gKDctOXkpIiwgIkFkdWx0cyIpKQpgYGAKCmBgYHtyfQpmaWdfZDJfYWxsX3Njb3JlZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfYWdlZ3BfZDJfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2FnZWdwX2QyX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kMl9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQzEiLCAiQzIiLCAiQzMiKSwgbmNvbCA9IDMpCgpmaWdfZDJfYWxsX3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19hZ2VncF9kMl9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgbmEudHJhbnNsYXRlID0gRiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kMl9hbGxfc2NvcmVkX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QyX2FsbF9zY29yZWRfYWRfcGxvdHMsIGZpZ19kMl9hbGxfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QyX2FsbF9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJUcmFja2luZyBkZXZlbG9wbWVudCBiZXR3ZWVuIDctOXkgYW5kIGFkdWx0aG9vZCAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDJfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kMl9hbGxfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDJfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMKClhYCgpgYGB7cn0KcGxvdHNfZDJfNzlfc2NvcmVkXzc5IDwtIHJlbHZpel9mdW4oZDJfNzlfc2NvcmVkXzc5KQpgYGAKCmBgYHtyfQpmaWdfZDJfNzlfc2NvcmVkXzc5X3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kMl83OV9zY29yZWRfNzlbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QyXzc5X3Njb3JlZF83OVtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfNzlfc2NvcmVkXzc5W1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJBMSIsICJBMiIsICJBMyIpLCBuY29sID0gMykKCmZpZ19kMl83OV9zY29yZWRfNzlfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDJfNzlfc2NvcmVkXzc5W1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2QyXzc5X3Njb3JlZF83OV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kMl83OV9zY29yZWRfNzlfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDJfNzlfc2NvcmVkXzc5X2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDJfNzlfc2NvcmVkXzc5X3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMjogQ2hpbGRyZW4sIDctOXkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzKSIsIAogICAgICAgICAgICAgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kMl83OV9zY29yZWRfNzlfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDJfNzlfc2NvcmVkXzc5X3RpdGxlLCBmaWdfZDJfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKCmBgYHtyfQpkMl83OV9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkMl83OV9zY29yZWRfYWQpCmQyXzc5X3Njb3JlZF83OV9kaWZmIDwtIGRpZmZfZnVuKGQyXzc5X3Njb3JlZF83OSkKc2F2ZVJEUyhkMl83OV9zY29yZWRfYWRfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QyXzc5X3Njb3JlZF9hZF9kaWZmIikKc2F2ZVJEUyhkMl83OV9zY29yZWRfNzlfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QyXzc5X3Njb3JlZF83OV9kaWZmIikKYGBgCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKYGBge3J9CnBsb3RfZDJfNzlfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQyXzc5X3Njb3JlZF9hZF9kaWZmLCBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgpYWAoKIyMjIyMjIERldmVsb3BtZW50YWwgY29tcGFyaXNvbgoKYGBge3J9CiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlLAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlLAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCkpCgpyX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZV9ncm91cCwKICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIAogICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSwKICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCkpCgpzdW1tYXJ5KHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlLAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCkpCgpyX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlX2dyb3VwLAogIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgCiAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCkpCgojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnN1bW1hcnkocl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlX2dyb3VwLAogIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgCiAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlLAogICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApKQoKIyByX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnN1bW1hcnkocl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcwoKYGBge3J9CnBsb3RfZDJfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQyXzc5X3Njb3JlZF83OV9kaWZmLCBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMl83OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCkKYGBgCgpYWAoKIyMgRGlzY3Vzc2lvbgoKWFgKCmBgYHtyfQpzY2FsZXNfc3R1ZHkyIDwtIGJpbmRfcm93cyhzY2FsZXNfZWZhX3dkbV9kMl9hZCAlPiUgbXV0YXRlKHN0dWR5ID0gIkFkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kMl83OSAlPiUgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA3LTl5IikpICU+JQogIHNlbGVjdCgtYyhsb2FkaW5nLCBvcmRlcikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgc3ByZWFkKHN0dWR5LCBmYWN0b3IpICU+JQogIG11dGF0ZSh1cl9mYWN0b3IgPSBpZmVsc2UoIWlzLm5hKGBBZHVsdHNgKSwgYEFkdWx0c2AsIGBDaGlsZHJlbiwgNy05eWApKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDJfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kMl83OSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl83OSA9IG9yZGVyKSkgJT4lCiAgYXJyYW5nZSh1cl9mYWN0b3IsIG9yZGVyX2FkLCBvcmRlcl83OSkgJT4lCiAgc2VsZWN0KC1jKHVyX2ZhY3Rvciwgc3RhcnRzX3dpdGgoIm9yZGVyIikpKQpgYGAKCmBgYHtyfQp0YWJsZTQuMiA8LSBzY2FsZXNfc3R1ZHkyICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jYXBhY2l0eSksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKGlzLm5hKC4pLCAiIiwgIuKckyIpKSkgJT4lCiAgcmVuYW1lKENhcGFjaXR5ID0gY2FwYWNpdHkpICU+JQogIGthYmxlKGZvcm1hdCA9ICJodG1sIiwKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDQuMjogU2NhbGVzIGZvciBlYWNoIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIChmYWN0b3JzKSBpZGVudGlmaWVkIGJ5IEVGQSBmb3IgVVMgQWR1bHRzIGFuZCBjaGlsZHJlbiBpbiBTdHVkeSAyIChzZWUgQ2hhcHRlciBJSUkpLiBBIGNoZWNrbWFyayBpbmRpY2F0ZXMgdGhhdCBhIG1lbnRhbCBjYXBhY2l0eSB3YXMgaW5jbHVkZWQgaW4gYSBzY2FsZSBmb3IgYSBwYXJ0aWN1bGFyIHNhbXBsZS4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQk9EWSBzY2FsZSIsIDEsIDcpICU+JQogIGdyb3VwX3Jvd3MoIkhFQVJUIHNjYWxlIiwgOCwgMTQpICU+JQogIGdyb3VwX3Jvd3MoIk1JTkQgc2NhbGUiLCAxNSwgMjMpCmBgYAoKYGBge3IgdGFibGU0LjIsIGluY2x1ZGUgPSBUfQp0YWJsZTQuMgpgYGAKCmBgYHtyfQpmaWd1cmU0LjMgPC0gcGxvdF9ncmlkKGZpZ19kMl9hZF9wbG90c19sZWdfdGl0bGUsIAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kMl83OV9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kMl9hbGxfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSkKCmZpZ3VyZTQuM19jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjMsIHN0cl93cmFwKCJGaWd1cmUgNC4zOiBSZWxhdGlvbnNoaXBzIGFtb25nIFVTIGFkdWx0cycsIG9sZGVyIGNoaWxkcmVuJ3MsIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMiwgc2NvcmVkIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyAoc2VlIFRhYmxlIDQuMikuIFBsb3RzIGFyZSBvcmdhbml6ZWQgYnkgc2FtcGxlIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gKEEpIEFkdWx0cy4gKEIpIENoaWxkcmVuICg3LTl5IG9mIGFnZSksIHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcy4gKEMpIEEgdmlzdWFsaXphdGlvbiBvZiBkZXZlbG9wbWVudCBiZXR3ZWVuIDctOXkgYW5kIGFkdWx0aG9vZCwgdXNpbmcgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFuZCBhZ2UgZ3JvdXAuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbiBwYW5lbHMgQS1CLCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS40fQpnZ2RyYXcoZmlndXJlNC4zX2NhcCkKYGBgCgpgYGB7cn0KZmlndXJlNC40IDwtIHBsb3RfZ3JpZChmaWdfZDJfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEpCgpmaWd1cmU0LjRfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC40LCBzdHJfd3JhcCgiRmlndXJlIDQuNDogUmVsYXRpb25zaGlwcyBhbW9uZyBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDIsIHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzIChzZWUgVGFibGUgNC4yKS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNX0KZ2dkcmF3KGZpZ3VyZTQuNF9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuNV9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9kMl9hZF9zY29yZWRfYWRfZGlmZiArCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IEFkdWx0cyIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSwKICBwbG90X2QyXzc5X3Njb3JlZF9hZF9kaWZmICsKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMjogQ2hpbGRyZW4sIDctOXkgKHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcykiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksCiAgcGxvdF9kMl83OV9zY29yZWRfNzlfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAyOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMpIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpLCAKICBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMSksCiAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC41X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuNV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA0LjU6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gVVMgYWR1bHRzJyBhbmQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAyLiB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyAocGFuZWwgQikgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAocGFuZWwgQzsgc2VlIFRhYmxlIDQuMikuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC41X2NhcCkKYGBgCgojIFN0dWR5IDM6IENvbmNlcHR1YWwgY2hhbmdlIG92ZXIgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDQtOXkpCgpJbiBTdHVkeSAzLCBgciBucm93KGQzX2FkX3dpZGUpYCBVUyBhZHVsdHMsIGByIG5yb3coZDNfNzlfd2lkZSlgICJvbGRlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFyczsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSwgYW5kIGByIG5yb3coZDNfNDZfd2lkZSlgICJ5b3VuZ2VyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgIHllYXJzOyBtZWRpYW46IGByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiAyMCBtZW50YWwgY2FwYWNpdGllcy4gVG8gbWFrZSB0aGUgc3R1ZHkgYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIGluIHRoaXMgYWdlIHJhbmdlLCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgYSBzdWJzZXQgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGVtcGxveWVkIGluIFN0dWR5IDIsIGNob3NlbiB0byByZXByZXNlbnQgdGhlIHRocmVlICJjb25jZXB0dWFsIHVuaXRzIiByZXZlYWxlZCBieSBTdHVkaWVzIDEtMiAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKSBhbmQgdG8gY292ZXIgYSBzaW1pbGFyIHJhbmdlIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGFzIFN0dWRpZXMgMS0yLiBBcyBpbiBTdHVkeSAyLCBwYXJ0aWNpcGFudHMgcmVzcG9uZGVkIG9uIGEgMy1wb2ludCBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IG9yIHBzZXVkby1yYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgZWl0aGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIDkgY2hhcmFjdGVyczogYW4gZWxlcGhhbnQsIGEgZ29hdCwgYSBtb3VzZSwgYSBiaXJkLCBhIGJlZXRsZSwgYSB0ZWRkeSBiZWFyLCBhIGRvbGwsIGEgcm9ib3QsIG9yIGEgY29tcHV0ZXIuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKCiMjIFJlc3VsdHMKCiMjIyBBZHVsdHMKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDNfYWQgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDNfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkKQpkM19hZF9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQzX2FkLCBzY2FsZXNfZWZhX3dkbV9kM19hZCkKCnNhdmVSRFMoc2NhbGVzX2VmYV93ZG1fZDNfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2QzX2FkIikKc2F2ZVJEUyhkM19hZF9zY29yZWRfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfYWRfc2NvcmVkX2FkIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZClgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kM19hZCAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjMuCgojIyMjIFZpc3VhbGl6YXRpb24KClhYCgpgYGB7cn0KcGxvdHNfZDNfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDNfYWRfc2NvcmVkX2FkLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KZmlnX2QzX2FkX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM19hZF9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM19hZF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM19hZF9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJBMSIsICJBMiIsICJBMyIpLCBuY29sID0gMykKCmZpZ19kM19hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM19hZF9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QzX2FkX3Bsb3RzLCBmaWdfZDNfYWRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM19hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kM19hZF90aXRsZSwgZmlnX2QzX2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpYWAoKYGBge3J9CmQzX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQzX2FkX3Njb3JlZF9hZCkKc2F2ZVJEUyhkM19hZF9zY29yZWRfYWRfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzX2FkX3Njb3JlZF9hZF9kaWZmIikKYGBgCgpgYGB7cn0KZDNfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDNfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QzX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM19hZF9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIENoaWxkcmVuICg3LTl5KQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kM183OSA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kM183OSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpCmQzXzc5X3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDNfNzksIHNjYWxlc19lZmFfd2RtX2QzX2FkKQpkM183OV9zY29yZWRfNzkgPC0gc2NvcmVfZnVuKGQzXzc5LCBzY2FsZXNfZWZhX3dkbV9kM183OSkKCnNhdmVSRFMoc2NhbGVzX2VmYV93ZG1fZDNfNzksIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2QzXzc5IikKc2F2ZVJEUyhkM183OV9zY29yZWRfYWQsIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNzlfc2NvcmVkX2FkIikKc2F2ZVJEUyhkM183OV9zY29yZWRfNzksIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNzlfc2NvcmVkXzc5IikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM183OSlgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kM183OSAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjMuCgojIyMjIFZpc3VhbGl6YXRpb24KCiMjIyMjIFVzaW5nIGFkdWx0cycgc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RzX2QzXzc5X3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQzXzc5X3Njb3JlZF9hZCwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM183OV9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzc5X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM183OV9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzc5X3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM183OV9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzc5X3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kM183OV9zY29yZWRfYWRfcGxvdHMsIGZpZ19kM183OV9zY29yZWRfYWRfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfNzlfc2NvcmVkX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDctOXkgKHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcykiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzc5X3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM183OV9zY29yZWRfYWRfdGl0bGUsIGZpZ19kM183OV9zY29yZWRfYWRfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RzX2QzXzc5X3Njb3JlZF83OSA8LSByZWx2aXpfZnVuKGQzXzc5X3Njb3JlZF83OSwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfc2NvcmVkXzc5W1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM183OV9zY29yZWRfNzlbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM183OV9zY29yZWRfNzlbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90cywgZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMpIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNzlfc2NvcmVkXzc5X3RpdGxlLCBmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKCmBgYHtyfQpkM183OV9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkM183OV9zY29yZWRfYWQpCmQzXzc5X3Njb3JlZF83OV9kaWZmIDwtIGRpZmZfZnVuKGQzXzc5X3Njb3JlZF83OSkKc2F2ZVJEUyhkM183OV9zY29yZWRfYWRfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzXzc5X3Njb3JlZF9hZF9kaWZmIikKc2F2ZVJEUyhkM183OV9zY29yZWRfNzlfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzXzc5X3Njb3JlZF83OV9kaWZmIikKYGBgCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKWFgKCmBgYHtyfQpwbG90X2QzXzc5X3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM183OV9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM183OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM183OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kM183OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzc5X3Njb3JlZF83OV9kaWZmLCBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMgQ2hpbGRyZW4gKDQtNnkpCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QzXzQ2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM180NikKc2NhbGVzX2VmYV9wYXJfZDNfNDYgPC0gc2NhbGVfZnVuKGVmYV9wYXJfZDNfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NikKZDNfNDZfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkM180Niwgc2NhbGVzX2VmYV93ZG1fZDNfYWQpCmQzXzQ2X3Njb3JlZF80Nl93ZG0gPC0gc2NvcmVfZnVuKGQzXzQ2LCBzY2FsZXNfZWZhX3dkbV9kM180NikKZDNfNDZfc2NvcmVkXzQ2X3BhciA8LSBzY29yZV9mdW4oZDNfNDYsIHNjYWxlc19lZmFfcGFyX2QzXzQ2KQoKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kM180NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNDYiKQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF9hZCwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kM180Nl9zY29yZWRfYWQiKQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbSIpCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kM180Nl9zY29yZWRfNDZfcGFyIikKYGBgCgojIyMjIyBUaHJlZS1mYWN0b3Igc29sdXRpb24KCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2QzXzQ2ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMy4KCiMjIyMjIFR3by1mYWN0b3Igc29sdXRpb24KCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfcGFyX2QzXzQ2ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMy4KCiMjIyMgVmlzdWFsaXphdGlvbgoKIyMjIyMgVXNpbmcgYWR1bHRzJyBzY2FsZXMKClhYCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDNfNDZfc2NvcmVkX2FkLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KZmlnX2QzXzQ2X3Njb3JlZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzQ2X3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQzEiLCAiQzIiLCAiQzMiKSwgbmNvbCA9IDMpCgpmaWdfZDNfNDZfc2NvcmVkX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzXzQ2X3Njb3JlZF9hZFtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM180Nl9zY29yZWRfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzLCBmaWdfZDNfNDZfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzXzQ2X3Njb3JlZF9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5IChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM180Nl9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKWFgKCmBgYHtyfQpwbG90c19kM180Nl9zY29yZWRfNDZfd2RtIDwtIHJlbHZpel9mdW4oZDNfNDZfc2NvcmVkXzQ2X3dkbSwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG1bWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCMSIsICJCMiIsICJCMyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDMpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90cywgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5IChzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fdGl0bGUsIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKWFgKCmBgYHtyfQpwbG90c19kM180Nl9zY29yZWRfNDZfcGFyIDwtIHJlbHZpel9mdW4oZDNfNDZfc2NvcmVkXzQ2X3BhciwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM180Nl9zY29yZWRfNDZfcGFyW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkMxIiksIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMsIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDItZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDNfNDZfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDNfNDZfc2NvcmVkX2FkKQpkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9mdW4oZDNfNDZfc2NvcmVkXzQ2X3dkbSkKZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXIpCnNhdmVSRFMoZDNfNDZfc2NvcmVkX2FkX2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kM180Nl9zY29yZWRfYWRfZGlmZiIpCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKc2F2ZVJEUyhkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmYiKQpgYGAKCiMjIyMjIFVzaW5nIGFkdWx0cycgc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RfZDNfNDZfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF9hZF9kaWZmLCBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMjIyMgRGV2ZWxvcG1lbnRhbCBjb21wYXJpc29uCgpgYGB7cn0KIyByX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTNfYWdlZ3ApLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5LAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpyX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlX2dyb3VwLAogIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgCiAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCnN1bW1hcnkocl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCnJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZV9ncm91cCwKICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIAogICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAsCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpzdW1tYXJ5KHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTNfYWdlZ3ApLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5LAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpyX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlX2dyb3VwLAogIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgCiAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSkKCnN1bW1hcnkocl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMgKHRocmVlLWZhY3RvciBzb2x1dGlvbikKClhYCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBIRUFSVCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gSEVBUlQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBIRUFSVCoiKSkKCnN1bW1hcnkocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQqIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAodHdvLWZhY3RvciBzb2x1dGlvbikKClhYCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWS1IRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZLUhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EKQpgYGAKCiMjIERpc2N1c3Npb24KClhYCgpgYGB7cn0Kc2NhbGVzX3N0dWR5MyA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDNfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJPbGRlciBjaGlsZHJlbiwgNy05eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3R1ZHkgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfcGFyX2QzXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgyLWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9sZGVyIGNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSghaXMubmEoYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbGRlciBjaGlsZHJlbiwgNy05eWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkpKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyX2FkID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfNzkgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNzkpICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGU0LjMgPC0gc2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMi1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB8IAogICAgICAgICAgICAgdGVtcDIgPT0gYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBPbGRlciBjaGlsZHJlbiwgNy05eWAgfAogICAgICAgICAgICAgKGlzLm5hKGBBZHVsdHNgKSAmIGlzLm5hKGBPbGRlciBjaGlsZHJlbiwgNy05eWApKSB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgLCBgT2xkZXIgY2hpbGRyZW4sIDctOXlgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAyLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgNC4zOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMsIG9sZGVyIGNoaWxkcmVuLCBhbmQgeW91bmdlciBjaGlsZHJlbiBpbiBTdHVkeSAzIChzZWUgQ2hhcHRlciBJSUkpLiBGb3IgeW91bmdlciBjaGlsZHJlbiwgdGhpcyBpbmNsdWRlcyBzY2FsZXMgZm9yIGJvdGggdGhyZWUtIGFuZCB0d28tZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBzdWNoIHRoYXQgc29tZSBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGluY2x1ZGVkIGluIGRpZmZlcmVudCBzY2FsZXMgYWNyb3NzIGFnZSBncm91cHMgKGUuZy4sIGZlZWwgc2NhcmVkIHdhcyBwYXJ0IG9mIHRoZSBCT0RZIHNjYWxlIGZvciBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgSEVBUlQqIHNjYWxlIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNykgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA4LCAxNCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDE1LCAyMCkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDMsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlNC4zLCBpbmNsdWRlID0gVH0KdGFibGU0LjMKYGBgCgpgYGB7cn0KcGxvdHNfYWdlZ3BfZDNfc2NvcmVkX2FkIDwtIHJlbHZpel9hZ2VncF9mdW4oCiAgZF9zY29yZWQgPSBkM19hZF9zY29yZWRfYWQgJT4lIAogICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCkgJT4lIAogICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZCksIAogIGFnZV9ncm91cHMgPSBjKCJjaGlsZHJlbjQ2IiwgImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2dyb3VwX2xhYmVscyA9IGMoIkNoaWxkcmVuLCAoNC02eSkiLCAiQ2hpbGRyZW4gKDctOXkpIiwgIkFkdWx0cyIpLAogIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfYWdlZ3BfZDNfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2FnZWdwX2QzX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kM19zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiRDEiLCAiRDIiLCAiRDMiKSwgbmNvbCA9IDMpCgpmaWdfZDNfYWxsX3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19hZ2VncF9kM19zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgbmEudHJhbnNsYXRlID0gRiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM19hbGxfc2NvcmVkX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzX2FsbF9zY29yZWRfYWRfcGxvdHMsIGZpZ19kM19hbGxfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzX2FsbF9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJUcmFja2luZyBkZXZlbG9wbWVudCBiZXR3ZWVuIDQtOXkgYW5kIGFkdWx0aG9vZCAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM19hbGxfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KZmlndXJlNC44IDwtIHBsb3RfZ3JpZChmaWdfZDNfYWRfcGxvdHNfbGVnX3RpdGxlLCAKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDNfNzlfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzX2FsbF9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxKQoKZmlndXJlNC44X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuOCwgc3RyX3dyYXAoIkZpZ3VyZSA0Ljg6IFJlbGF0aW9uc2hpcHMgYW1vbmcgVVMgYWR1bHRzJywgb2xkZXIgY2hpbGRyZW4ncywgYW5kIHlvdW5nZXIgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLCBzY29yZWQgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIChzZWUgVGFibGUgNC4zKS4gKEEpIEFkdWx0cy4gKEIpIE9sZGVyIGNoaWxkcmVuICg3LTl5IG9mIGFnZSkuIChDKSBZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5IG9mIGFnZSkuIChEKSBBIHZpc3VhbGl6YXRpb24gb2YgZGV2ZWxvcG1lbnQgYmV0d2VlbiA0LTl5IGFuZCBhZHVsdGhvb2QsIHVzaW5nIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwLiBQbG90cyBhcmUgb3JnYW5pemVkIGJ5IHNhbXBsZSAocm93cykgYW5kIGJ5IHBhaXIgb2YgY29uY2VwdHVhbCB1bml0cyAoY29sdW1ucykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbiBwYW5lbHMgQS1DLCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS44fQpnZ2RyYXcoZmlndXJlNC44X2NhcCkKYGBgCgpgYGB7cn0KZmlndXJlNC45IDwtIHBsb3RfZ3JpZChmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSkKCmZpZ3VyZTQuOV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjksIHN0cl93cmFwKCJGaWd1cmUgNC45OiBSZWxhdGlvbnNoaXBzIGFtb25nIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSA0LjMpLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0d28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CMykgYW5kIHVzaW5nIGEgdHdvLWZhY3RvciBFRkEgc29sdXRpb24gKEMxLUMzKS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzYW1wbGUgYW5kIHNjYWxlIHVzZWQgKHJvd3MpIGFuZCBieSBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuNH0KZ2dkcmF3KGZpZ3VyZTQuOV9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTBfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDNfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBBZHVsdHMiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RfZDNfNzlfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdF9kM180Nl9zY29yZWRfYWRfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIG5jb2wgPSAzLCByZWxfd2lkdGhzID0gYygxLCAxLCAxKSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmU0LjEwX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlndXJlNC4xMF9wbG90cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kM19hZF9zY29yZWRfYWRfZGlmZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmU0LjEwX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuMTBfcGxvdHNfbGVnLCBzdHJfd3JhcCgiRmlndXJlIDQuMTA6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gVVMgYWR1bHRzJyBhbmQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLiB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyAocGFuZWwgQikgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAocGFuZWwgQzsgc2VlIFRhYmxlIDQuMykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC4xMF9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTFfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgcGxvdF9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMi1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgbmNvbCA9IDMsIHJlbF93aWR0aHMgPSBjKDEsIDEsIDAuOCksCiAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC4xMV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ3VyZTQuMTFfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbGVnZW5kKHBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQoKZmlndXJlNC4xMV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjExX3Bsb3RzX2xlZywgc3RyX3dyYXAoIkZpZ3VyZSA0LjExOiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhbmQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDMsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIEZvciB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5IG9mIGFnZSksIHRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKHBhbmVsIEIpIGFuZCBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyB0aGUgdHdvLWZhY3RvciBzb2x1dGlvbiAocGFuZWwgQzsgc2VlIFRhYmxlIDQuMykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC4xMV9jYXApCmBgYAoKCiMgU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpCgpJbiBTdHVkeSA0LCBgciBucm93KGQ0X2FkX3dpZGUpLzJgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkNF80Nl93aWRlKS8yYCBVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSBlYWNoIGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjdGVycyBvbiAxOCBtZW50YWwgY2FwYWNpdGllcy4gVG8gbWFrZSB0aGUgc3R1ZHkgYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIGluIHRoaXMgYWdlIHJhbmdlLCB0aGlzIHN0dWR5IGVtcGxveWVkIGEgbmV3IHNldCBvZiAxOCBtZW50YWwgY2FwYWNpdGllcyAoc29tZSBidXQgbm90IGFsbCBvZiB3aGljaCB3ZXJlIHVzZWQgaW4gU3R1ZGllcyAxLTMpLiBJbiBhZGRpdGlvbiwgcGFydGljaXBhbnRzIHdlcmUgcHJlc2VudGVkIHdpdGggYSBtb3JlIGNoaWxkLWZyaWVuZGx5IHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgMy1wb2ludCByZXNwb25zZSBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIGFzc2Vzc2luZyBib3RoIGEgYmVldGxlIG9yIGEgcm9ib3QgaW4gc2VxdWVuY2UgKHdpdGggb3JkZXIgY291bnRlcmJhbGFuY2VkIGFjcm9zcyBwYXJ0aWNpcGFudHMpLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgojIyBSZXN1bHRzCgojIyMgQWR1bHRzCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2Q0X2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2Q0X2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCkKZDRfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkNF9hZCwgc2NhbGVzX2VmYV93ZG1fZDRfYWQpCgpzYXZlUkRTKHNjYWxlc19lZmFfd2RtX2Q0X2FkLCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3dkbV9kNF9hZCIpCnNhdmVSRFMoZDRfYWRfc2NvcmVkX2FkLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2Q0X2FkX3Njb3JlZF9hZCIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC40LgoKIyMjIyBWaXN1YWxpemF0aW9uCgpYWAoKYGBge3J9CnBsb3RzX2Q0X2FkX3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQ0X2FkX3Njb3JlZF9hZCwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CmZpZ19kNF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDRfYWRfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfYWRfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfYWRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfYWRfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2Q0X2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2Q0X2FkX3Bsb3RzLCBmaWdfZDRfYWRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0X2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kNF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kNF9hZF90aXRsZSwgZmlnX2Q0X2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpYWAoKYGBge3J9CmQ0X2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQ0X2FkX3Njb3JlZF9hZCkKc2F2ZVJEUyhkNF9hZF9zY29yZWRfYWRfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2Q0X2FkX3Njb3JlZF9hZF9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kNF9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDRfYWRfc2NvcmVkX2FkX2RpZmYsIGNvbG9yczAyKQpgYGAKCmBgYHtyfQojIHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kNF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyBDaGlsZHJlbiAoNC01eSkKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV9wYXJfZDRfNDYgPC0gc2NhbGVfZnVuKGVmYV9wYXJfZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NikKc2NhbGVzX2VmYV93ZG1fZDRfNDYgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDRfNDYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KQpkNF80Nl9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQ0XzQ2LCBzY2FsZXNfZWZhX3dkbV9kNF9hZCkKZDRfNDZfc2NvcmVkXzQ2X3BhciA8LSBzY29yZV9mdW4oZDRfNDYsIHNjYWxlc19lZmFfcGFyX2Q0XzQ2KQpkNF80Nl9zY29yZWRfNDZfd2RtIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV93ZG1fZDRfNDYpCgpzYXZlUkRTKHNjYWxlc19lZmFfd2RtX2Q0XzQ2LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3dkbV9kNF80NiIpCnNhdmVSRFMoZDRfNDZfc2NvcmVkX2FkLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2Q0XzQ2X3Njb3JlZF9hZCIpCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kNF80Nl9zY29yZWRfNDZfcGFyIikKc2F2ZVJEUyhkNF80Nl9zY29yZWRfNDZfd2RtLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2Q0XzQ2X3Njb3JlZF80Nl93ZG0iKQpgYGAKCiMjIyMjIFRocmVlLWZhY3RvciBzb2x1dGlvbgoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV9wYXJfZDRfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC40LgoKIyMjIyMgRm91ci1mYWN0b3Igc29sdXRpb24KCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2Q0XzQ2ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuNC4KCiMjIyMgVmlzdWFsaXphdGlvbgoKIyMjIyMgVXNpbmcgYWR1bHRzJyBzY2FsZXMKClhYCgpgYGB7cn0KcGxvdHNfZDRfNDZfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDRfNDZfc2NvcmVkX2FkLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDRfNDZfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQjEiLCAiQjIiLCAiQjMiKSwgbmNvbCA9IDMpCgpmaWdfZDRfNDZfc2NvcmVkX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF9hZFtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2Q0XzQ2X3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDRfNDZfc2NvcmVkX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDRfNDZfc2NvcmVkX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNXkgKHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcykiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2Q0XzQ2X3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfYWRfdGl0bGUsIGZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzICh0aHJlZS1mYWN0b3Igc29sdXRpb24pCgpYWAoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXIgPC0gcmVsdml6X2Z1bihkNF80Nl9zY29yZWRfNDZfcGFyLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMgKGZvdXItZmFjdG9yIHNvbHV0aW9uKQoKWFgKCmBgYHtyfQpwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtIDwtIHJlbHZpel9mdW4oZDRfNDZfc2NvcmVkXzQ2X3dkbSwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1s0XV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzVdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbNl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCMSIsICJCMiIsICJCMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQjQiLCAiQjUiLCAiQjYiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMykKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNXkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCA0LWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV90aXRsZSwgZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CmQ0XzQ2X3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF9hZCkKZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXIpCmQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiA8LSBkaWZmX2Z1bihkNF80Nl9zY29yZWRfNDZfd2RtKQpzYXZlUkRTKGQ0XzQ2X3Njb3JlZF9hZF9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkX2FkX2RpZmYiKQpzYXZlUkRTKGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiIpCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKYGBge3J9CnBsb3RfZDRfNDZfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF9hZF9kaWZmLCBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgpYWAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzICh0aHJlZS1mYWN0b3Igc29sdXRpb24pCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAoZm91ci1mYWN0b3Igc29sdXRpb24pCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfQk9EWW90aGVyIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZb3RoZXJfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChvdGhlcikgLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIERpc2N1c3Npb24KClhYCgpgYGB7cn0Kc2NhbGVzX3N0dWR5NCA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV9wYXJfZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pYCkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCkgJT4lCiAgc2VsZWN0KC1jKHVyX2ZhY3Rvciwgc3RhcnRzX3dpdGgoIm9yZGVyIikpKQpgYGAKCmBgYHtyfQp0YWJsZTQuNCA8LSBzY2FsZXNfc3R1ZHk0ICU+JQogIG11dGF0ZV9hbGwoYXMuY2hhcmFjdGVyKSAlPiUKICAjIGRlYWwgd2l0aCBDaGlsZHJlbiwgNC1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgQ2hpbGRyZW4sIDQtNXkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfiAi4pyTIiwKICAgICAgICAgICBpcy5uYSh0ZW1wMikgfiAiIiwKICAgICAgICAgICBUUlVFIH4gdGVtcDEpKSAlPiUKICBtdXRhdGUoYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgID0gdGVtcDMpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRlbXAiKSkgJT4lCiAgIyBkZWFsIHdpdGggQ2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICB0ZW1wMiA9IGdzdWIoIlxcKiIsICIiLCB0ZW1wMSksCiAgICAgICAgIHRlbXAzID0gY2FzZV93aGVuKAogICAgICAgICAgIHRlbXAyID09IGBBZHVsdHNgIH4gIuKckyIsCiAgICAgICAgICAgaXMubmEodGVtcDIpIH4gIiIsCiAgICAgICAgICAgVFJVRSB+IHRlbXAxKSkgJT4lCiAgbXV0YXRlKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICBgNC1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA0LjQ6IFNjYWxlcyBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyAoZmFjdG9ycykgaWRlbnRpZmllZCBieSBFRkEgZm9yIFVTIEFkdWx0cyBhbmQgY2hpbGRyZW4gaW4gU3R1ZHkgNCAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIGNoaWxkcmVuLCB0aGlzIGluY2x1ZGVzIHNjYWxlcyBmb3IgYm90aCB0aHJlZS0gYW5kIGZvdXItZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBhZHVsdHMsIHN1Y2ggdGhhdCBzb21lIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgaW5jbHVkZWQgaW4gZGlmZmVyZW50IHNjYWxlcyBhY3Jvc3MgYWdlIGdyb3VwcyAoZS5nLiwgbG92ZSBzb21lb25lIHdhcyBwYXJ0IG9mIHRoZSBIRUFSVCBzY2FsZSBmb3IgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgTUlORCogc2NhbGUgaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNSkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA2LCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDExLCAxNSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSIgPSAyKSkKYGBgCgpgYGB7ciB0YWJsZTQuNCwgaW5jbHVkZSA9IFR9CnRhYmxlNC40CmBgYAoKYGBge3J9CnBsb3RzX2FnZWdwX2Q0X3Njb3JlZF9hZCA8LSByZWx2aXpfYWdlZ3BfZnVuKAogIGRfc2NvcmVkID0gZDRfYWRfc2NvcmVkX2FkICU+JSAKICAgIGZ1bGxfam9pbihkNF80Nl9zY29yZWRfYWQpLCAKICBhZ2VfZ3JvdXBzID0gYygiY2hpbGRyZW40NiIsICJhZHVsdHMiKSwKICBhZ2VfZ3JvdXBfbGFiZWxzID0gYygiQ2hpbGRyZW4sICg0LTV5KSIsICJBZHVsdHMiKSwKICBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0X2FsbF9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2FnZWdwX2Q0X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kNF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfYWdlZ3BfZDRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkQxIiwgIkQyIiwgImQ0IiksIG5jb2wgPSAzKQoKZmlnX2Q0X2FsbF9zY29yZWRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfYWdlZ3BfZDRfc2NvcmVkX2FkW1sxXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwgbmEudHJhbnNsYXRlID0gRiwgCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kNF9hbGxfc2NvcmVkX2FkX3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF9hbGxfc2NvcmVkX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0X2FsbF9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJUcmFja2luZyBkZXZlbG9wbWVudCBiZXR3ZWVuIDQtNXkgYW5kIGFkdWx0aG9vZCAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF9hbGxfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KZmlndXJlNC4xMiA8LSBwbG90X2dyaWQoZmlnX2Q0X2FkX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxKQoKZmlndXJlNC4xMl9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjEyLCBzdHJfd3JhcCgiRmlndXJlIDQuMTI6IFJlbGF0aW9uc2hpcHMgYW1vbmcgVVMgYWR1bHRzJyBhbmQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSA0LCBzY29yZWQgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIChzZWUgVGFibGUgNC40KS4gKEEpIEFkdWx0cy4gKEIpIENoaWxkcmVuICg0LTV5IG9mIGFnZSkuIChDKSBBIHZpc3VhbGl6YXRpb24gb2YgZGV2ZWxvcG1lbnQgYmV0d2VlbiA0LTV5IGFuZCBhZHVsdGhvb2QsIHVzaW5nIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwLiBQbG90cyBhcmUgb3JnYW5pemVkIGJ5IHNhbXBsZSAocm93cykgYW5kIGJ5IHBhaXIgb2YgY29uY2VwdHVhbCB1bml0cyAoY29sdW1ucykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbiBwYW5lbHMgQS1CLCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS40fQpnZ2RyYXcoZmlndXJlNC4xMl9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTMgPC0gcGxvdF9ncmlkKGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAyKSkKCmZpZ3VyZTQuMTNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xMywgc3RyX3dyYXAoIkZpZ3VyZSA0LjEzOiBSZWxhdGlvbnNoaXBzIGFtb25nIFVTIGFkdWx0cycsIG9sZGVyIGNoaWxkcmVuJ3MsIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgc2NhbGVzIChzZWUgVGFibGUgNC40KS4gVHR3byBzZXRzIG9mIHNjb3JlcyBhcmUgcHJlc2VudGVkOiB1c2luZyBhIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKEExLUEzKSBhbmQgdXNpbmcgYSBmb3VyLWZhY3RvciBFRkEgc29sdXRpb24gKEIxLUI2KS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjM1fQpnZ2RyYXcoZmlndXJlNC4xM19jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTRfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDRfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBBZHVsdHMiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksCiAgcGxvdF9kNF80Nl9zY29yZWRfYWRfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSwgCiAgbmNvbCA9IDIsIHJlbF93aWR0aHMgPSBjKDEsIDEpLAogIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTQuMTRfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xNF9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA0LjE0OiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIFVTIGFkdWx0cycgYW5kIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgNC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEsIHN1Y2ggdGhhdCBkaWZmZXJlbmNlIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIC0xIHRvICsxLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gZGlmZmVyZW5jZSBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQgKGkuZS4sIGEgZGlmZmVyZW5jZSBzY29yZSBvZiAwKS4iLCAxODApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gOCwgZmlnLmFzcCA9IDAuMzh9CmdnZHJhdyhmaWd1cmU0LjE0X2NhcCkKYGBgCgpgYGB7cn0KZmlndXJlNC4xNV9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpLCAKICBwbG90X2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC02eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCA0LWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksIAogIG5jb2wgPSAyLCByZWxfd2lkdGhzID0gYygxLCAyKSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmU0LjE1X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuMTVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNC4xNTogRGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgNCwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcy4gVGhpcyBpbmNsdWRlcyBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyB0aGUgdGhyZWUtZmFjdG9yIEVGQSBzb2x1dGlvbiAocGFuZWwgQSkgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiAocGFuZWwgQjsgc2VlIFRhYmxlIDQuNCkuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC4xNV9jYXApCmBgYAoKCiMgR2VuZXJhbCBkaXNjdXNzaW9uCgpYWAoKCiMgQ2hhcHRlciBjb25jbHVzaW9uCgpJbiB0aGlzIGNoYXB0ZXIsIEkgZXhwbG9yZWQgYSBzZWNvbmQgYXNwZWN0IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFtb25nIFVTIGNoaWxkcmVuIGFuZCBhZHVsdHM6IFRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGNvbmNlcHR1YWwgdW5pdHMuIFN0dWRpZXMgMi00IGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGZvbGxvd2luZyB0aGVvcnk6IFhYLiAKCkFzIGluIENoYXB0ZXIgSUlJLCBJIHVyZ2UgdGhlIHJlYWRlciB0byByZW1lbWJlciB0aGF0IHRoaXMgaXMgbm90IHRoZSBvbmx5IHBvc3NpYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSBwYXR0ZXJuIG9mIHJlc3VsdHMgcHJlc2VudGVkIGhlcmU7IGFkZGl0aW9uYWwgc3R1ZGllc+KAlGluIHBhcnRpY3VsYXIsIHN0dWRpZXMgZGVzaWduZWQgdG8gdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IFhY4oCUIGNvdWxkIHByb3ZpZGUgY29udmVyZ2luZyBldmlkZW5jZSBvciBjb3VsZCBjaGFsbGVuZ2UgdGhpcyB0aGVvcmV0aWNhbCBpbnRlcnByZXRhdGlvbi4gSW5zdGVhZCwgdGhlIHByaW1hcnkgcm9sZSBvZiB0aGUgcmUtYW5hbHlzaXMgZGlzY3Vzc2VkIGhlcmUgaGFzIGJlZW4gdG8gaW5zcGlyZSB0aGUgaHlwb3RoZXNpcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCBhbmQgdG8gdGhlIGZvdW5kYXRpb24gZm9yIGZ1dHVyZSB0ZXN0cyBvZiB0aGlzIGh5cG90aGVzaXMsIGluIHR1cm4gcmVmaW5pbmcgYSBnZW5lcmFsIHRoZW9yeSBvZiB0aGlzIGFzcGVjdCBvZiBjb25jZXB0dWFsIGRldmVsb3BtZW50LiAgCgpJbiB0aGUgbmV4dCBjaGFwdGVyLCBJIGFwcGx5IHRoZSBzYW1lIGV4cGxvcmF0b3J5IHNwaXJpdCB0byB0aGUgdGhpcmQgYW5kIGZpbmFsIGFzcGVjdCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZTogdGhlIGFwcGxpY2F0aW9uIG9yIGRlcGxveW1lbnQgb2YgdGhlc2UgY29uY2VwdHVhbCB1bml0cyBpbiByZWFzb25pbmcgYWJvdXQgdmFyaW91cyBraW5kcyBvZiBiZWluZ3MuCgoKIyBUTyBETwoKLSBpbXBsZW1lbnQgb3ZlcmFsbCBwbGFuCiAgICAtIHN0dWR5IDE6IGFkdWx0cyBmb3IgZWFjaCBzYW1wbGUgPSA0IHJlZ3MgdG90YWwKICAgIC0gc3R1ZHkgMjogYWR1bHRzIGZvciBlYWNoIHNhbXBsZSAoMik7IGNoaWxkcmVuJ3MgZm9yIGNoaWxkIHNhbXBsZSAoMSk7IGNvbXBhcmlzb24gKDEpID0gNCByZWdzIHRvdGFsCiAgICAtIHN0dWR5IDM6IGFkdWx0cyBmb3IgZWFjaCBzYW1wbGUgKDMpOyBjb21wYXJpc29uICgxKSA9IDQgcmVncyB0b3RhbAogICAgLSBzdHVkeSA0OiBhZHVsdHMgZm9yIGVhY2ggc2FtcGxlICgyKTsgY29tcGFyaXNvbiAoMSkgPSAzIHJlZ3MgdG90YWwgCi0gbWFrZSByZWdyZXNzaW9uIHRhYmxlcwogICAgLSBzdHVkeSAxICg0IHJlZ3M6IHN0dWRpZXMgMWEtMWQpCiAgICAtIHN0dWR5IDIgKDMgcmVnczogYWR1bHQgc2NhbGVzIGZvciBhZHVsdHMsIGNoaWxkcmVuOyBjaGlsZCBzY2FsZXMpCiAgICAtIHN0dWR5IDIgKDEgcmVnOiBkZXZlbG9wbWVudGFsIGNvbXBhcmlzb24pCiAgICAtIHN0dWR5IDMgKDMgcmVnczogYWR1bHQgc2NhbGVzIGZvciBhZHVsdHMsIG9sZGVyLCB5b3VuZyBjaGlsZHJlbikKICAgIC0gc3R1ZHkgMyAoMSByZWc6IGRldmVsb3BtZW50YWwgY29tcGFyaXNvbikKICAgIC0gc3R1ZHkgNCAoMiByZWdzOiBhZHVsdCBzY2xlcyBmb3IgYWR1bHRzLCBjaGlsZHJlbikKICAgIC0gc3R1ZHkgNCAoMSByZWc6IGRldmVsb3BtZW50YWwgY29tcGFyaXNvbikKLSBtb3ZlIHRvIGFwcGVuZGl4CiAgICAtIHN0dWR5IDI6IGFkdWx0cycgNC1mYWN0b3Igc29sdXRpb24gZm9yIGFkdWx0cz8gZm9yIDctOXlvPwogICAgLSBzdHVkeSAzOiA3LTl5byBmb3IgNy05eW8gKDEpOyA0LTZ5byBmb3IgNC02eW8geCAyICgyKQogICAgLSBzdHVkeSA0OiA0LTZ5byBmb3IgNC02eW8geCAyICgyKQotIHJlY29uc2lkZXIgYWRkaW5nIHRvIGFwcGVuZGl4CiAgICAtIHN0dWR5IDM6IDctOXlvIGZvciA0LTZ5bz8KICAgIC0gYWxsIHN0dWRpZXM6IGNvbXBhcmlzb25zIGFjcm9zcyBwYWlycyBvZiB1bml0cyAoaW5zdGVhZCBvZiBzZXBhcmF0ZSByZWdzIGZvciBlYWNoIHVuaXQpPwogICAgCgoKCg==